我有这段代码:
function titleCase(str) {
str=str.toLowerCase();
str=str.split("");
var evilstr=str;
var counter = [];
for (i=0;i<150;i++) {
counter.push(evilstr.findIndex(function(character){
return character===" ";
}));
evilstr[i]="x";
}
return str;
}
titleCase("I'm a little tea pot");
它产生了这个结果:
'['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x',...'
为什么str
受到for循环的影响?在我把它分成不同的字符之后,我根本不会改变它,是吗?
答案 0 :(得分:0)
请勿更改str
的值。只需将```evilstr``设置为要从输入字符串生成的数组:
var evilstr = str.toLowerCase().split('')
然后你需要实际返回evilstr
而不是```str``。
return evilStr.join('')
或者,您根本不创建evilStr
:
function titleCase(str) {
str = str.toLowerCase().split(' ');
for (var i = 0; i < str.length; i++) {
str[i] = str[i].charAt(0).toUpperCase() + str[i].slice(1);
}
return str.join(' ');
}
titleCase("I'm a little tea pot");
但要真正回答你的问题:javascript中的数组和对象总是通过引用存储,除非你专门创建一个新的。
// this creates a new array with 4 items
var arr = [1,2,3,4]
// this creates a new variable that points to the array referenced in arr
var arr2 = arr
// add a value to arr2
arr2.push(5)
// check the value of arr
console.log(arr) /// shows [1,2,3,4,5]
因此,当您将str
的值更改为数组,然后将evilStr
指向该数组时,您对evilStr
所做的任何更改都会转到str
同样。