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是按默认的回退值设置的。为什么会被否决?有点可笑。