Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们可以';t在javascript中修改字符串长度,我们可以在哪里修改数组的长度?_Javascript - Fatal编程技术网

为什么我们可以';t在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没有被修改。是否有任何特定原因不允许在字符串上执行此行为?字符串是设计不变的。您不能更改它们,但可以将引用重新指定给

我正在学习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没有被修改。是否有任何特定原因不允许在字符串上执行此行为?

字符串是设计不变的。您不能更改它们,但可以将引用重新指定给新的字符串值。如果要缩短字符串,可以使用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链接感谢所有快速答案。在我看来,问题来自于数组:直接设置数组的长度并不是一种非常优雅的数组变异方法。这并不能回答这个问题。相反,这说明了如何观察结果。问题是为什么。