使用 Object.create 创建的 Javascript 数组 - 不是真正的数组?

标签 javascript v8 object-create

看起来用 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 来执行此操作?

最佳答案

简短的回答是否定的。 This article详细解释了这一切。

关于使用 Object.create 创建的 Javascript 数组 - 不是真正的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514487/

相关文章:

JavaScript 继承 : Object. create vs new

Javascript私有(private)变量+Object.create(引用闭包变量)

javascript - 在 fetchcall 中将 ""替换为 %20

javascript - angular 4 - 部署后如何修复白屏

javascript - javascript构造函数和object.create可以结合使用吗?

与大写字母相关的Javascript正则表达式无限循环

javascript - Node 4 和 Node 6 的堆差异

javascript - 火狐这个功能

javascript - 在 React/TypeScript 应用程序中初始化可为空状态的正确方法是什么?

javascript - Chrome-Javascript : Negative Exponent Calculation is wrong for > -3