我相当了解 JavaScript 和初始化数据结构时使用的原型(prototype)继承,但我仍然不完全确定 JS 的独特功能之一是如何工作的。
假设我创建了一个数组:
var myArr = [];
我现在可以将项目推送到数组:
myArr.push('foo');
myArr.push('bar');
此时myArr.length == 2
现在我可以做类似的事情
myArr['myProp'] = 5; // OR myArr.myProp = 5;
但是我的 myArr.length 仍然等于 2,我可以使用某种类型的迭代方法来迭代最初推送的 2 个值。
所以基本上这个对象是一个“混合”数据结构,可以像数组或对象一样对待。
所以我的问题是原生对象语法(myObj.someProperty = 'blah'
或 myObj['someProperty'] = 'blah'
)是否专门适用于Object.prototype 以及从该原型(prototype)继承的任何对象?这是有道理的,因为对象的原型(prototype)链看起来像:
var myObj = {} -> Object.prototype -> null
数组的原型(prototype)链如下所示:
var myArr = [] -> Array.prototype -> Object.prototype -> null
这让我假设您可以用对象 (myObj.someProperty//as getter or setter
) 做的任何事情都可以用数组来完成,这将解释我上面提到的现象。
最佳答案
正式确定我的答案。这是完全正确的。除了字面量和临时值,几乎所有 JavaScript 中的东西都是对象。包括函数、数组和变量。
正是出于这个确切的原因,使用以下语法遍历数组被认为是危险的:
for (x in myArray){}
上面这行代码可能会导致不可预知的结果!
这种将所有数据类型创建为对象的方法允许 JavaScript 尽可能地动态和灵活。
您可以看到对象 here 的完整描述.
关于用作混合数据结构的 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952495/