在 W3School JS String Method 中看到 Accessing a String as an Array is Unsafe,像数组一样访问字符串是不安全的。
var str = "HELLO WORLD";
str[0]; // returns H
这在 IE5 ~ IE7 中是不工作的,并且会使得字符串看起来很像数组,实际上并不是。
且 str 只有可读性, str[0] = a;
是不生效且不报错的。
这是 JavaScript 字符串的不可变性。
字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
但这并不意味着 str 永远不能被改变,只是字符串字面量 “HELLO WORLD” 的各个字符不能被改变。改变 str 中的唯一方法是重新给它赋一个值 str = "hello world"
而 C++ 中能修改 str[index] 是因为 string 对象在初始化的时候,将源常量字符串复制到了自己新分配的内存空间,而这个空间是可写的,源常量字符串不可写。
因此,要像数组一样访问字符串,最好还是将字符串转换为数组访问
var str = "a,b,c,d,e";
str.split(","); // [ 'a', 'b', 'c', 'd', 'e' ]
str.split(" "); // [ 'a,b,c,d,e' ]
str.split("|"); // [ 'a,b,c,d,e' ]
str.split(""); // [ 'a', ',', 'b', ',', 'c', ',', 'd', ',', 'e' ]
或使用 charAt() 和 charCodeAt() 访问
var str = "HELLO WORLD";
str.charAt(0); // returns H
var str = "HELLO WORLD";
str.charCodeAt(0); // returns 72