Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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代码?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何使用解构和初始化读取此ES6代码?

Javascript 如何使用解构和初始化读取此ES6代码?,javascript,ecmascript-6,Javascript,Ecmascript 6,我遇到了如下代码: const { foo = [] } = this.options 假设在本例中this.options是一个JavaScript对象,这是如何工作的?是否将所有this.options分配给foo?如果this.options未定义,foo是否只是初始化为空数组?我发现这段代码令人困惑,因为this.options不是数组,而是key/val对的对象 有时候尝试一下会有帮助。您会注意到,如果要指定的对象中缺少foo,则会为foo指定一个默认值 功能一{ 常量选项={

我遇到了如下代码:

const {
  foo = []
} = this.options

假设在本例中this.options是一个JavaScript对象,这是如何工作的?是否将所有this.options分配给foo?如果this.options未定义,foo是否只是初始化为空数组?我发现这段代码令人困惑,因为this.options不是数组,而是key/val对的对象

有时候尝试一下会有帮助。您会注意到,如果要指定的对象中缺少foo,则会为foo指定一个默认值

功能一{ 常量选项={}; 常数{ foo=[] }=期权; console.logfoo; } 功能二{ const options={foo:'bar'}; 常数{ foo=[] }=期权; console.logfoo; } 功能三{ 常量选项={}; 常数{ foo='foo', bar='bar', baz='baz' }=期权; console.logfoo、bar、baz; } 一 二 三, 来自emphesis矿山:

destructuring assignment语法是一个JavaScript表达式,它可以将数组中的值或对象中的属性解压缩到不同的变量中

并不是所有这些。将选项分配给foo,它将从对象中解包foo:

常量选项={ foo:['foo','bar'], 酒吧:“你好,世界” } 常数{ foo=[] }=期权;
console.logfoo 如果您看到this.options.foo存在,那么它将绑定到该作用域中的名称“foo”,如果不存在,那么foo将被设置为空数组。

下面是一篇深入的文章,让您更好地理解ES6解构

分解分配允许您分配 使用类似于数组的语法将数组或对象转换为变量 或对象文字。这种语法可以非常简洁,但仍然 显示出比传统的财产访问更清晰的信息

对于示例脚本,分配正在从右侧查找具有属性foo的对象。如果找不到它,它会将默认值为空数组的foo赋值

如果左侧为null或未定义,则运算符将抛出一个错误Uncaught TypeError:Cannot destructure propertyfooof'undefined'或'null'。

//一个普通的JS对象。 此选项={ ‘a’:‘a’, ‘foo’:‘bar’, “z”:“z” } log'this.options.foo=',this.options.foo; //this.options.foo==='bar' //把“foo”从这个选项中去掉。如果此.options中不存在“foo”,则将变为未定义。 const{foo}=this.options; console.log'foo=',foo; //foo===this.options.foo====bar'; const{nope}=this.options; console.log'nope=',nope; //nope的类型==“未定义” //如果存在“zzz”,则获取它,否则返回1234。 const{zzz=1234}=this.options; console.log'zzz=',zzz; //zzz==1234;
//zzz是按默认的回退值设置的。为什么会被否决?有点可笑。