奇怪的javascript对象问题
下面是一个简单的js测试脚本奇怪的javascript对象问题,javascript,object,Javascript,Object,下面是一个简单的js测试脚本 <script> var testarray = new Array(); testarray['length'] = "1,2,3,4,5"; alert(testarray['length']); </script> var testarray=新数组(); testarray['length']=“1,2,3,4,5”; 警报(testarray['length']); 如果运行它,您将收到以下错误消息: 必须为数组长度指定一个有
<script>
var testarray = new Array();
testarray['length'] = "1,2,3,4,5";
alert(testarray['length']);
</script>
var testarray=新数组();
testarray['length']=“1,2,3,4,5”;
警报(testarray['length']);
如果运行它,您将收到以下错误消息:
必须为数组长度指定一个有限的正数
你知道原因是什么以及如何克服它吗
注意:如果将“长度”更改为任何其他内容,它将显示对象的内容,而不会出现任何问题。Array.length
是对象的内置属性
只能将其设置为整数值:
length属性的值是一个带正号的整数,其值小于32次方(232)的2
可以将length属性设置为随时截断数组。通过更改数组的长度属性扩展数组时,实际元素的数量不会增加;例如,如果在当前为2时将“长度”设置为3,则该数组仍仅包含2个元素
参考资料:
- ()
Javascript对象 我猜你想要的是一个,而不是一个: 当然,还有一些可选的语法选择: 第一行是以下内容的快捷方式:
var testobj = new Object();
方括号符号可替换为点符号:
testobj.length = "1,2,3,4,5";
alert(testobj.length);
(当然,方括号和点也可以混合使用)只需添加到JavaScript中,您可以使用点符号或括号符号访问对象属性。因此:
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”]
这意味着“对象的属性“0”a
”,就像a[“foo”]
意味着“对象的属性“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
构造函数生成的,因此它们具有prototypeArray.prototype
及其所有有用的函数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"