使用Object.create创建的Javascript数组-不是真正的数组
Javascript Arrays created with Object.create - not real Arrays?
它看起来像是用Object.create创建的类似行走的数组和类似嘎嘎的数组,但仍然不是真正的数组。至少使用v8/node.js.
> a = []
[]
> b = Object.create(Array.prototype)
{}
> a.constructor
[Function: Array]
> b.constructor
[Function: Array]
> a.__proto__
[]
> b.__proto__
[]
> a instanceof Array
true
> b instanceof Array
true
> Object.prototype.toString.call(a)
'[object Array]'
> Object.prototype.toString.call(b)
'[object Object]'
一些Javascript大师能解释为什么会这样,以及如何使我新创建的数组与真正的数组无法区分吗?
我的目标是克隆数据结构,包括可能附加了自定义属性的数组。当然,我可以使用Object.defineProperty
手动将属性附加到新创建的数组,但有没有使用Object.create
的方法?
简短的答案是否定的。本文将对此进行详细解释。
不,不能。Object.create
都是关于原型的,但[]
和Object.create(Array.prototype)
都继承自同一个原型对象。
您称之为"所需Object.prototype.toString behavior"的是对象的内部[[Class]]
,这是用Object.create
无法设置的。只有通过使用数组文字或调用Array
构造函数才能创建"真正的数组"(具有Array
类和特殊的数组行为索引属性.length
)。
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript