在字符串对象中重新定义length属性

时间:2013-07-18 15:52:59

标签: javascript

这两者有什么区别?

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 )

我无法将长度属性赋予字符串对象为什么?我没有替换原始长度属性但是在字符串对象中创建新属性,即使它会失败的原因是什么原因?谢谢你

4 个答案:

答案 0 :(得分:1)

<强>阵列:

在第一种情况下,如果设置数组的长度,数组将使用未定义填充。看看documentation。阅读further

  

length属性的值是一个整数,带有正号,值小于2到32次幂(232)。

     

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

ECMA Script documentation

  

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);