这是一个简单的js测试脚本
<script>
var testarray = new Array();
testarray['length'] = "1,2,3,4,5";
alert(testarray['length']);
</script>
如果您运行它,您将收到以下错误消息:
必须为数组长度指定有限的正数
知道是什么原因以及如何克服它?
注意:如果您将“长度”更改为其他任何内容,它将显示该对象的内容而没有任何问题。
答案 0 :(得分:10)
Array.length
是Array
对象的内置属性。
您只能将其设置为整数值:
长度属性的值是带有正号的整数,值小于2到32次幂(2 32 )。
您可以设置length属性以随时截断数组。通过更改其长度属性来扩展数组时,实际元素的数量不会增加;例如,如果在当前为2时将长度设置为3,则该数组仍然只包含2个元素。
<强>参考:强>
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
属性是关于数组的三个特殊事物之一(其中一个并不是那么特别)。数组和普通对象之间的仅差异为:
a[0]
实际上意味着a["0"]
,意思是“对象a
的属性'0',就像a["foo"]
意味着”对象{{1}的属性'foo'一样}}。特殊a
属性:它总是大于具有最高十进制数字字符串名称的属性的数值(例如,最高的“数组索引”),或者您设置的值,以较高者为准。所以:
length
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
及其所有有用的功能。就是这样。它们与几乎所有其他语言中的数组非常不同。例如,它们不是连续的内存块(尽管实现可以按照这种方式实现它们;它可能效率低下。)