奇怪的javascript对象问题

时间:2011-01-04 10:05:22

标签: javascript object

这是一个简单的js测试脚本

<script>
var testarray = new Array();
testarray['length'] = "1,2,3,4,5";
alert(testarray['length']);
</script>

如果您运行它,您将收到以下错误消息:

必须为数组长度指定有限的正数

知道是什么原因以及如何克服它?

注意:如果您将“长度”更改为其他任何内容,它将显示该对象的内容而没有任何问题。

2 个答案:

答案 0 :(得分:10)

Array.length

Array.lengthArray对象的内置属性。

您只能将其设置为整数值:

  

长度属性的值是带有正号的整数,值小于2到32次幂(2 32 )。

     

您可以设置length属性以随时截断数组。通过更改其长度属性来扩展数组时,实际元素的数量不会增加;例如,如果在当前为2时将长度设置为3,则该数组仍然只包含2个元素。

<强>参考:


Javascript对象

我的猜测是你需要Object,而不是Array

var testobj = {};
testobj['length'] = "1,2,3,4,5";
alert(testobj['length']);

当然有一些替代语法选择:

第一行是:

的快捷方式
var testobj = new Object();

方括号表示法可以用点符号替换:

testobj.length = "1,2,3,4,5";
alert(testobj.length);

(方括号和圆点当然也可以混合使用)

答案 1 :(得分:3)

只需使用JavaScript添加到Sean's excellent answer,您可以使用点分表示法或括号表示法来访问对象属性。所以:

var a = [];          // Same thing as a = new Array();
alert(a.length);     // alerts 0
alert(a['length']);  // ditto
var x = 'len';
alert(a[x + "gth"]); // ditto

和类似的

var a = [];
a.length = 3;        // That's fine, the array's length is now 3
a['length'] = 4;     // And now it's four
var x = 'len';
a[x + "gth"] = 5;    // And now it's five

所以你试图设置长度(到一个字符串)。数组实例的length属性是特殊的,并且(如您所发现的)必须是非负的有限整数值。


Tangent :事实上,length属性是关于数组的三个特殊事物之一(其中一个并不是那么特别)。数组和普通对象之间的差异为:

  1. 它有一类特殊的属性名称,即数字,十进制字符串。我们倾向于将它们称为“数组索引”并将它们写为数字,但它们不是。 a[0]实际上意味着a["0"],意思是“对象a的属性'0',就像a["foo"]意味着”对象{{1}的属性'foo'一样}}。
  2. 特殊a属性:它总是大于具有最高十进制数字字符串名称的属性的数值(例如,最高的“数组索引”),或者您设置的值,以较高者为准。所以:

    length
  3. 数组实例由var a = []; a[0] = "foo"; // a.length is automatically set to 1 a[4] = "bar"; // a.length is automatically set to 5 a.length = 3; // a.length is now 3, and any properties that have numeric // decimal string names of "3" or higher are deleted, thus: alert(a[4]); // "undefined" 构造函数制造,因此它们具有原型Array及其所有有用的功能。
  4. 就是这样。它们与几乎所有其他语言中的数组非常不同。例如,它们不是连续的内存块(尽管实现可以按照这种方式实现它们;它可能效率低下。)