var x =["a", "b", "c"]
x.forEach(function(element, i){
x[i] = x[i].toUpperCase();
})
console.log(x) // ["A", "B", "C"] what I want
var x =["a", "b", "c"]
x.forEach(function(element, i){
element = element.toUpperCase();
})
console.log(x)// ["a", "b", "c"] not what I want
每个元素不应该完全意味着x [i]吗?为什么我得到不一致的答案?
答案 0 :(得分:4)
在下面的代码中:
var x =["a", "b", "c"]
x.forEach(function(element, i){
element = element.toUpperCase();
})
您正在对element
进行更改,该更改会在下一个})
之后消失。此外,它不会影响x
,因为它只是一个只读属性。
答案 1 :(得分:1)
每个元素不应该完全意味着x [i]吗?
不,它只是一个副本,具有相同的值。如果x
数组的元素是非基本类型(对象),则是,那些将通过引用传递,对element
的更改也将反映在x[i]
中。但在原始值(字符串)的情况下,元素只是x
中的值的副本。
答案 2 :(得分:0)
您正在引用primitive value而不是对象。
var x = ["a", "b", "c"];
x.forEach(function(element, i, array) { // array is the calling array x
array[i] = array[i].toUpperCase();
});
document.write('<pre>' + JSON.stringify(x, 0, 4) + '</pre>');
&#13;