2

这两者有什么区别?

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

4 回答 4

1

大批:

在第一种情况下,如果您设置数组的长度,则数组将被填充 undefined。查看文档进一步阅读

长度属性的值是一个带正号且值小于 2 的 32 次方 (232) 的整数。

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

ECMA 脚本文档

length 属性最初具有属性{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }

细绳:

字符串的长度属性是只读的。字符串值的属性不能更改。查看ECMA 脚本文档

此 String 对象表示的 String 值中的字符数。

一旦创建了 String 对象,此属性就不会改变。它具有属性{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }

于 2013-07-18T15:56:23.843 回答
0

字符串是不可变的,你不能像那样改变它们的长度。

我没有替换原来的长度属性,而是在字符串对象中创建新的,即使它会失败

为什么你这么想?您不能有两个具有相同名称的属性,所以是的,您正在尝试替换原始属性。

如果你想要一个子字符串,请使用:

me = me.substr(0,2);
于 2013-07-18T15:56:26.767 回答
0

length返回数组的元素个数,或字符串中的字符数。它只是只读的,不可写的。

于 2013-07-18T15:57:58.283 回答
0

对于 javascript 中的 Array 对象,length 属性是设计用来设置的,会截断数组。所以它不是只读的。不知何故,String 类似乎已将长度属性设置为只读。如果要缩短字符串,可以使用 substring 属性:

var length = 2;
var myString = "Angus";
var myTruncatedString = myString.substring(0,length);
于 2013-07-18T16:09:01.733 回答