为什么JavaScript中可修改数组长度却无法修改字符串长度?
为什么修改字符串的
length属性不生效,而数组可以? 这个问题问得很到位!核心原因在于JavaScript里字符串(String)是不可变的原始值类型,而数组(Array)是可变的引用类型,两者的length属性设计逻辑完全不同,咱们一步步拆解:
1. 数组的length是可写属性,直接控制数组内容
数组的length是一个可读写的属性,修改它会直接作用于数组本身:
- 当你把
length设为小于原数组长度的值时,数组会自动截断超出新长度的元素,就像你做的测试:var array = new Array(1, 2, 3, 4 ,5); array.length = 4; console.log(array); // 输出 [1, 2, 3, 4] - 要是把
length设为更大的值,数组会在末尾补充空位(这些空位在访问时会返回undefined)。
2. 字符串的length是只读属性,且字符串本身不可变
哪怕你用new String()创建了字符串包装对象,字符串的核心内容依然是不可变的:
String对象的length属性是只读的,非严格模式下给它赋值不会报错,但这个操作完全不会对原字符串产生任何影响,就像你测试的:var str = new String("abcdef"); str.length = 5; console.log(str); // 依然输出 "abcdef"- 日常开发里我们更常用字符串字面量(比如
"abcdef"),它是原始值,连可写属性都不存在,给它的length赋值同样无效。
3. 想“修改”字符串长度?得创建新字符串
因为字符串不可变,所以如果要得到一个指定长度的字符串,你需要创建一个新的字符串实例,比如用slice()方法:
var str = "abcdef"; var newStr = str.slice(0, 5); console.log(newStr); // 输出 "abcde"
这里的newStr是一个全新的字符串,原str还是保持原来的样子。
内容的提问来源于stack exchange,提问作者kadina
相关产品推荐
相关产品推荐

