将javascript数组视为对象时会发生什么?

时间:2010-09-17 16:42:22

标签: javascript

下面的索引变量未正确初始化,因为f()将返回除数字之外的其他内容,如字符串。那么这里可能发生的最坏情况是什么?我的测试似乎表明它没有效果,但现在我想知道......

function index(o, f) {
    var index = []; // should be index = {};
    each(o, function(k, v, o) { index[f(k, v, o)] = v; });
    return index;
}

4 个答案:

答案 0 :(得分:4)

Javascript数组是具有自动设置length属性并继承Array.prototype的特殊对象。
除非使用length属性,否则将数组视为对象没有任何害处。

答案 1 :(得分:2)

数组一个对象,因此它可以被视为没有太多副作用。但是这样做可能会导致一些混淆,因为length属性不计算非数字键,并且所有数组原型函数同样会忽略它们。

只需将[]更改为{}

即可

答案 2 :(得分:0)

您将创建一个关联数组,这是一个有效的JavaScript结构。虽然它在技术上与对象不同,但您可以像对象一样与数组交互(for ... in to iterate,myarray [key]来获取值)。如果您怀疑某些键是字符串,您可能需要考虑返回一个对象而不是一个数组。

答案 3 :(得分:0)

“f()将返回除数字之外的其他内容,例如字符串”

如果f()只返回字符串,那么你就可以了,你只是将数组用作对象并添加属性。唯一的缺点是阵列本身仍然是空的,所以例如你不能计算你添加了多少项。

如果f()可以返回字符串和数字,那就会造成混乱。循环有时会填充数组,有时是对象属性。

我不确定你的意思是“喜欢字符串”,但是如果f()返回的既不是数字也不是字符串,那么它就不会起作用。