ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[链接]()### 基本用法 转为对象以后具备 [Iterator 接口](https://blog.csdn.net/li1484155613/article/details/102171103),要么本身就具备 Iterator 接口 ``` function* fibs() { let a = 0; let b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } let [first, second, third, fourth, fifth, sixth] = fibs(); sixth // 5 ``` ***** ## 对象的解构赋值 对象的解构与数组有一个重要的不同,变量必须与属性同名,才能取到正确的值 ``` let { bar, foo } = { foo: 'aaa', bar: 'bbb' }; foo // "aaa" bar // "bbb" let { baz } = { foo: 'aaa', bar: 'bbb' }; baz // undefined ``` 三次解构赋值,分别是对`loc`、`start`、`line`三个属性的解构赋值,只有`line`是变量,`loc`和`start`都是模式,不是变量。 ``` const node = { loc: { start: { line: 1, column: 5 } } }; let { loc, loc: { start }, loc: { start: { line }} } = node; line // 1 loc // Object {start: Object} start // Object {line: 1, column: 5} ``` 对象的解构赋值可以取到继承的属性 ``` const obj1 = {}; const obj2 = { foo: 'bar' }; Object.setPrototypeOf(obj1, obj2); const { foo } = obj1; foo // "bar" ``` 对象`obj1`的原型对象是`obj2`。`foo`属性不是`obj1`自身的属性,而是继承自`obj2`的属性,解构赋值可以取到这个属性