Javascript 我可以使用ES6/ES7编写更短的代码块吗
我有一段代码:Javascript 我可以使用ES6/ES7编写更短的代码块吗,javascript,ecmascript-6,ecmascript-2016,Javascript,Ecmascript 6,Ecmascript 2016,我有一段代码: const {address, cityDistrict, city, country} = data; const obj = { location: {address, cityDistrict, city, country} }; 但是我能写这封信吗?我试过这个,但它错了: const obj = { location: {address, cityDistrict, city, country} = data }; 可能吗?这在使用es2015预设时不起作用
const {address, cityDistrict, city, country} = data;
const obj = {
location: {address, cityDistrict, city, country}
};
但是我能写这封信吗?我试过这个,但它错了:
const obj = {
location: {address, cityDistrict, city, country} = data
};
可能吗?这在使用es2015预设时不起作用,但在使用es2016时起作用
试着这样做就说明了这一点
已更新
这说明了为什么这个不起作用
我还认为,您想要的是当前的不可能通过分解一行代码来实现。你最好坚持你的初衷,除非你真的不想分配一些变量,在这种情况下,你可能会使用iLife来过滤关键字
如前所述,如果使用ES提案阶段3,则可以使用
const data = {
address: 'address',
cityDistrict: 'district',
city: 'city',
country: 'country'
}
const { address, cityDistrict, city, country } = data;
const obj = {
location: {...data}
};
console.log(obj)
/* logs Object {
"location": Object {
"address": "address",
"city": "city",
"cityDistrict": "district",
"country": "country"
}
}
*/
这在使用es2015预设时不起作用,但在使用es2016时起作用
试着这样做就说明了这一点
已更新
这说明了为什么这个不起作用
我还认为,您想要的是当前的不可能通过分解一行代码来实现。你最好坚持你的初衷,除非你真的不想分配一些变量,在这种情况下,你可能会使用iLife来过滤关键字
如前所述,如果使用ES提案阶段3,则可以使用
const data = {
address: 'address',
cityDistrict: 'district',
city: 'city',
country: 'country'
}
const { address, cityDistrict, city, country } = data;
const obj = {
location: {...data}
};
console.log(obj)
/* logs Object {
"location": Object {
"address": "address",
"city": "city",
"cityDistrict": "district",
"country": "country"
}
}
*/
如果要复制数据,可以使用它:
const obj = {location: Object.assign({}, data)}
或者您也可以使用下一个代码,但更改obj.location会更改数据:
const obj = {location: data}
如果要复制数据,可以使用它:
const obj = {location: Object.assign({}, data)}
或者您也可以使用下一个代码,但更改obj.location会更改数据:
const obj = {location: data}
这实际上是可行的(至少在Chrome中是这样,如果将赋值括在括号中,在Babel中也是如此),但这两段代码并不等价
第二段代码简单地将数据
分配给位置
属性,并在名为地址
,城市数据区
的范围内创建4个新变量
例如:
const data = {
address: "Address",
cityDistrict: "District",
city: "City",
country: "Country"
}
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
console.log(obj);
看起来它记录了正确的数据,但实际上打印的是数据
,不是新对象。所以如果我们这样做:
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
data.address = "Test"
console.log(obj); // location.Address = Test
你会得到意想不到的数据。作为一个副作用,您还可以在范围中获得4个新变量:
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
console.log(address, cityDistrict, city, country); // All defined
您真正想做的是使用对象。分配
创建对象的新实例:
const obj = {
location: Object.assign({}, data);
}
这实际上是可行的(至少在Chrome中是这样,如果将赋值括在括号中,在Babel中也是如此),但这两段代码并不等价
第二段代码简单地将数据
分配给位置
属性,并在名为地址
,城市数据区
的范围内创建4个新变量
例如:
const data = {
address: "Address",
cityDistrict: "District",
city: "City",
country: "Country"
}
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
console.log(obj);
看起来它记录了正确的数据,但实际上打印的是数据
,不是新对象。所以如果我们这样做:
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
data.address = "Test"
console.log(obj); // location.Address = Test
你会得到意想不到的数据。作为一个副作用,您还可以在范围中获得4个新变量:
const obj = {
location: ({address, cityDistrict, city, country} = data)
};
console.log(address, cityDistrict, city, country); // All defined
您真正想做的是使用对象。分配
创建对象的新实例:
const obj = {
location: Object.assign({}, data);
}
您必须这样做
位置:{address:data.address,cityDistrict:data.cityDistrict,city:data.city,country:data.country}
…它似乎在chrome中为我工作?你的错误具体是什么?它是特定于浏览器的吗?对我有用,你在测试什么?数据包含的内容是否超过这些属性?这个问题几乎每天都会出现。为什么人们如此关注代码的智能化?你提供的工作代码可读性强,表达意图非常清晰。你必须这样做位置:{address:data.address,cityDistrict:data.cityDistrict,city:data.city,country:data.country}
…它似乎在chrome中为我工作?你的错误具体是什么?它是特定于浏览器的吗?对我有用,你在测试什么?数据包含的内容是否超过这些属性?这个问题几乎每天都会出现。为什么人们如此关注代码的智能化?你提供的工作代码是可读的,并且表达的意图非常清楚。我不确定这是预期的行为-可能只是两个预设插件之间不同解析技术的副作用?你是对的@codingitrigue,你的会得到意想不到的数据。作为一个副作用,您还可以在scope中获得4个新变量。我认为我们能做的最好的一个线性表达式就是使用data
作为参数来过滤键的立即调用函数表达式。但是结果比原始代码更难理解。“你想要的是用一个解构的一行程序无法实现的。”如果数据不包含其他属性:location:{…data}
。第三阶段提案。添加得很好@zeroflagL,我没有意识到这一点。值得一提的是[Stage 3 proposal]的实现在Babel REPL上仍然不起作用。它起作用了。我成功地测试了它。我不确定这是预期的行为-可能只是两个预设插件之间不同解析技术的副作用?你是对的@codingitrigue,你的会得到意想不到的数据。作为一个副作用,您还可以在scope中获得4个新变量。我认为我们能做的最好的一个线性表达式就是使用data
作为参数来过滤键的立即调用函数表达式。但是结果比原始代码更难理解。“你想要的是用一个解构的一行程序无法实现的。”如果数据不包含其他属性:location:{…data}
。第三阶段提案。添加得很好@zeroflagL,我没有意识到这一点。值得一提的是[Stage 3 proposal]的实现在Babel REPL上仍然不起作用。它起作用了。我成功地测试了它。嗨!谢谢你的回答,但是我不能做Object.assign({},data)
,因为我知道data
@rel1x里面有很多未使用的数据。我通常使用或嗨!谢谢你的回答,但我不能回答