Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以使用ES6/ES7编写更短的代码块吗_Javascript_Ecmascript 6_Ecmascript 2016 - Fatal编程技术网

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里面有很多未使用的数据。我通常使用或嗨!谢谢你的回答,但我不能回答