请解释在forEach(JS)中使用arr [2nd parameter] vs firstPrameter之间的这种不一致

时间:2015-12-12 22:37:55

标签: javascript

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]吗?为什么我得到不一致的答案?

3 个答案:

答案 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;
&#13;
&#13;