Object destructuring with property names that are

2019-01-06 21:19发布

问题:

Does anyone know if you can use object destructuring with spaces in the property name? Maybe this cannot be done and I realize the JavaScript notation is incorrect but I cannot change the server json response.

var obj1 = {name: 'Mr Smith', age: 21};
//destructure
var {name, age} = obj1;
//name='Mr Smith' and age=21

This works as expected.

But when I have the following object structure can I use object destructuring or not?

var obj2 = {"my name": "Mr Jones", age: 22};
var {'my name', age} = obj2; 

If this is not possible It would be nice if I could assign the variable with some sort of syntax like 'as'...

var {'my name' as name, age} = obj2; //name='Mr Jones';

Thanks

回答1:

You can assign it a valid variable name using this syntax:

var {"my name": myName, age} = obj2; 

// use myName here


回答2:

When I have an object with spaces in the property name can I use object destructuring or not?

Yes, you can use destructuring, but you can always only assign to identifiers (variable names). As those don't allow spaces, you cannot use the shorthand syntax where property name and identifier are the same.

It would be nice if I could assign the variable with some sort of syntax like 'as':

var {'my name' as name, age} = obj2;

as is for module imports/exports. For normal objects - both literals and destructuring - you use the colon ::

var {'my name': name, age} = obj2;