为什么我们可以';t在javascript中修改字符串长度,我们可以在哪里修改数组的长度?
我正在学习javascript。在其中一个文档中,我读到我们可以修改数组的长度。我试了以下方法,效果很好为什么我们可以';t在javascript中修改字符串长度,我们可以在哪里修改数组的长度?,javascript,Javascript,我正在学习javascript。在其中一个文档中,我读到我们可以修改数组的长度。我试了以下方法,效果很好 var array = new Array(1, 2, 3, 4 ,5); array.length = 4; 现在数组变成[1,2,3,4] 但同样的方法不适用于字符串 var str = new String("abcdef"); str.length = 5; str没有被修改。是否有任何特定原因不允许在字符串上执行此行为?字符串是设计不变的。您不能更改它们,但可以将引用重新指定给
var array = new Array(1, 2, 3, 4 ,5);
array.length = 4;
现在数组变成[1,2,3,4]
但同样的方法不适用于字符串
var str = new String("abcdef");
str.length = 5;
str没有被修改。是否有任何特定原因不允许在字符串上执行此行为?字符串是设计不变的。您不能更改它们,但可以将引用重新指定给新的字符串值。如果要缩短字符串,可以使用string slice()方法
当您在控制台中记录字符串对象时,您可以看到这不起作用的原因:
var str=新字符串(“abcdef”);
str.length=5;
console.log(str)
字符串是不可变的。对于字符串的新长度,您需要一个赋值,该赋值将复制具有新长度的字符串
var字符串='abcdef';
string=string.slice(0,4);
console.log(字符串)代码>.length属性对字符串的使用方式不同,因为它们是不可变的:
如果要更改字符串的长度,可以使用slice创建新字符串
尝试为字符串的.length属性赋值没有明显效果
var myString=“bluebells”;
//尝试为字符串的.length属性赋值没有明显效果。
myString.length=4;
log(myString);
/*“bluebells”*/
除了下面的快速答案外,您还可以在这里阅读关于不可变对象的精彩解释:感谢@joshAdams链接感谢所有快速答案。在我看来,问题来自于数组:直接设置数组的长度并不是一种非常优雅的数组变异方法。这并不能回答这个问题。相反,这说明了如何观察结果。问题是为什么。