Cla*_*diu 29 javascript arrays associative-array
即,以下代码如何:
var sup = new Array(5);
sup[0] = 'z3ero';
sup[1] = 'o3ne';
sup[4] = 'f3our';
document.write(sup.length + "<br />");
Run Code Online (Sandbox Code Playgroud)
输出'5'作为长度,当你所做的就是设置各种元素?
我对此代码的"问题"是,我不理解如何在length
不调用getLength()
或setLength()
方法的情况下进行更改.当我执行以下任何操作时:
a.length
a['length']
a.length = 4
a['length'] = 5
Run Code Online (Sandbox Code Playgroud)
在非数组对象上,它的行为类似于dict/associative数组.当我在数组对象上执行此操作时,它具有特殊含义.JavaScript中的哪种机制允许这种情况发生?javascript是否有某种类型的属性系统进行翻译
a.length
a['length']
Run Code Online (Sandbox Code Playgroud)
进入"获取"方法和
a.length = 4
a['length'] = 5
Run Code Online (Sandbox Code Playgroud)
进入"设置"方法?
tva*_*son 16
JavaScript中的所有内容都是一个对象.在a的情况下Array
,该length
属性返回数组的索引项的内部存储区域的大小.一些混淆可能会起作用,因为[]
运算符适用于数字和字符串参数.对于数组,如果将其与数字索引一起使用,则返回/设置预期的索引项.如果将它与字符串一起使用,它将返回/设置数组对象上的命名属性 - 除非字符串对应于数值,否则它将返回索引项.这是因为在JavaScript中,数组索引通过隐式toString()
调用强制转换为字符串.坦率地说,这只是让你头脑发热并且说"JavaScript,这就是为什么他们会嘲笑你"的那些东西.
浏览器之间的实际底层表示可能不同(或者可能不同).除了使用它时提供的接口之外,我不会依赖任何其他东西.
您可以在MDN上找到有关Javascript数组的更多信息.
JavaScript 数组的特征
在 JavaScript 中,运行时很难知道数组是密集的还是稀疏的。所以它所能做的就是猜测。所有实现都使用启发式方法来确定数组是密集还是稀疏。
例如,上面第 2 点中的代码可以向 JavaScript 运行时指示这可能是稀疏数组实现。如果数组使用初始计数进行初始化,则可能表明这可能是一个密集数组。
当运行时检测到数组是稀疏的时,它的实现方式与对象类似。因此,不是维护连续的数组,而是构建键/值映射。
有关更多参考信息,请参阅JavaScript 数组内部是如何实现的?
归档时间: |
|
查看次数: |
13892 次 |
最近记录: |