奇怪的javascript对象问题

奇怪的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']); 如果运行它,您将收到以下错误消息: 必须为数组长度指定一个有

下面是一个简单的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']);
如果运行它,您将收到以下错误消息:

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

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

注意:如果将“长度”更改为任何其他内容,它将显示对象的内容,而不会出现任何问题。

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
    构造函数生成的,因此它们具有prototype
    Array.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"