这两者有什么区别?
var me=[];
console.log(me.length)//outputs 0
me.length=5;
console.log(me.length)//outputs 5
但在这里,
var me = new String("Angus");
console.log(me.length = 2); //(error in strict mode)
console.log(me.length); //5 (not 2 )
我无法将长度属性赋予字符串对象为什么?我没有替换原始长度属性但是在字符串对象中创建新属性,即使它会失败的原因是什么原因?谢谢你
答案 0 :(得分:1)
<强>阵列:强>
在第一种情况下,如果设置数组的长度,数组将使用未定义填充。看看documentation。阅读further
length属性的值是一个整数,带有正号,值小于2到32次幂(232)。
您可以设置length属性以随时截断数组。通过更改其长度属性来扩展数组时,实际元素的数量不会增加;例如,如果在当前为2时将长度设置为3,则该数组仍然只包含2个元素。
length属性最初具有属性 {[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false} 。
<强>字符串:强>
String的length属性是只读的。无法更改字符串值的属性。看看ECMA Script documentation:
此String对象表示的String值中的字符数。
创建String对象后,此属性不变。它具有 {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false} 。
答案 1 :(得分:0)
字符串是不可变的,你只是不能改变它们的长度。
我没有替换原始长度属性,而是在字符串对象中创建新属性,即使它将失败
你为什么这么认为?您不能拥有两个具有相同名称的属性,所以是的,您正在尝试替换原始属性。
如果您想要子字符串,请使用:
me = me.substr(0,2);
答案 2 :(得分:0)
length
返回数组元素的数量,或字符串中的字符数。
它只是只读的,不可写的。
答案 3 :(得分:0)
对于javascript中的Array对象,设计了length属性并将截断该数组。所以它不是只读的。不知何故,String类似乎已将length属性设置为只读。如果要缩短字符串,可以使用substring属性:
var length = 2;
var myString = "Angus";
var myTruncatedString = myString.substring(0,length);