数组解构对象面试题
本文最后更新于 2024-12-13,文章内容可能已经过时。
let [a, b] = {
a: 2,
b: 5
}
console.log("a b", a, b)
通过
数组解构
的方式,将对象里的内容进行输出打印
,其不能改变原代码解构
!
当直接
运行以上代码
的时候,会看到如下结果
!VM58:1 Uncaught TypeError: {(intermediate value)(intermediate value)} is not iterable at <anonymous>:1:14
意思是,
解构的对象
内容是不可迭代
的(is not iterable)
!
下面看一个能够
正常解构的代码
!let [a, b] = [1, 2]; console.log(a, b, [1, 2]) // 1 2
顺便看下,
数组对象
里的属性
,其发现Symbol(Symbol.iterator)属性!
const iter = [1,2][Symbol.iterator](); console.log("iter:", iter.next()) // { value: 1, done: false } console.log("iter:", iter.next()) // { value: 2, done: false } console.log("iter:", iter.next()) // { value: undefind, done: true }
返会一个
函数
,其函数内部返回了一个可迭代器
!通过
迭代器对象
,调用next函数
即可获取数组中的每一项
!
数组解构的本质
:let [a, b] = [1, 2]; const iter = [1,2][Symbol.iterator](); let a = iter.next().value; let b = iter.next().value; console.log(a, b, [1, 2]) // 1 2
那么,如和
让一个对象
,变为一个可迭代对象
呢?
Object.prototype[Symbol.iterator] = function (){
// let arr = [2, 5];
let arr = Object.values(this); // 获取对象中的所有值 返回一个arr
return arr[Symbol.iterator]();
}
let [a, b] = {
a: 2,
b: 5
}
console.log("a b", a, b)
给
对象原型
,添加可迭代对象
,把数组的迭代对象
,返回出去
即可!
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果