正在重新定义字符串对象中的长度属性

Redefining length property in string object

本文关键字:对象 属性 字符串 新定义 定义      更新时间:2023-09-26

这两者之间有什么区别?

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 )

我无法将长度属性附加到字符串对象,为什么?我不是在替换原来的length属性,而是在字符串对象中创建一个新的属性,即使它会失败。这里的原因是什么?感谢您的

阵列:

在第一种情况下,如果设置数组的长度,则会用未定义的填充数组。查看文档。进一步阅读

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

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

和ECMA脚本文档:

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

字符串:

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

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

一旦创建了String对象,此属性将保持不变。它具有属性{[[Writable]]:false、[[Enumerable]]:false和[[Configuration]]:false}

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

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

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

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

me = me.substr(0,2);

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

对于javascript中的Array对象,length属性被设计为设置并将截断数组。所以它不是只读的。不知怎的,String类似乎已经将length属性设置为只读。如果你想缩短字符串,你可以使用子字符串属性:

var length = 2;
var myString = "Angus";
var myTruncatedString = myString.substring(0,length);