我无法理解为什么我的word[1]
会返回a
而不是i
,你能帮我理解吗?
var word = 'tangle';
document.write(word[1]); //returns 'a'
word[1] = 'i';
document.write(word[1]); //returns 'a'
(事实是,我想这样做,我的方法错了吗?)
//convert the first letter of each word of the string in upper case
var string = 'the quick brown fox';
stringSpl = string.split(' ');
for (var j=0; j<stringSpl.length; j++){
stringSpl[j][0] = stringSpl[j][0].toUpperCase(); //this line is the faulty one
}
document.write(stringSpl.join(' '));
答案 0 :(得分:2)
字符串在Javascript中是不可变的。
在JavaScript中,字符串是不可变对象,这意味着它们中的字符可能不会被更改,并且字符串上的任何操作实际上都会创建新字符串。字符串按引用分配,而不是按值分配。通常,当通过引用分配对象时,通过一个引用对对象所做的更改将通过对该对象的所有其他引用可见。但是,由于无法更改字符串,因此您可以对字符串对象进行多次引用,而不必担心字符串值会在您不知情的情况下发生更改。
资料来源:David Flanagan,在他的书“JavaScript, The Definitive Guide, 4th edition”(ISBN:978-0613911887)中。
答案 1 :(得分:1)
JavaScript中的字符串是不可变的;而不是修改它们,你必须创建一个修改过的副本。
请注意,word[1]
只是word.charAt(1)
的语法糖;正如你不希望word.charAt(1) = ...
修改word.charAt(1)
返回的字符(因为它没有通过引用返回),你也不能指望word[1] = ...
这样做。
对于您的示例,您可以编写如下内容:
var string = 'the quick brown fox';
var titleCasedString =
string.replace(/(^| )( )/g, function ($0, $1, $2) {
return $1 + $2.toUpperCase();
});
document.write(titleCasedString); // writes 'The Quick Brown Fox'
答案 2 :(得分:0)
String
不是Array
,但您可以使用索引器语法(类似于Array
的语法)从中获取字符。
但是,您不能使用相同的语法设置元素。
使用String.prototype.split
从Array
创建String
。