【发布时间】:2019-09-30 13:25:48
【问题描述】:
我知道数组是 javascript 中的对象,使其成为非原始数据类型,默认情况下使其成为按引用传递。 现在,在我遇到的大多数用例中都是如此,但是我分享的代码显示了一种我不理解的奇怪行为,它看起来更像是“按值类型传递”。
var arr = ['a','b','c']
/*
function addArr(ar){
ar.push('d')
return ar
}
console.log(addArr(arr)) // ['a', 'b', 'c', 'd']
console.log(arr) // ['a', 'b', 'c', 'd']
*/
//the above output is expected behavior for an Array object
function changeArr(ar){
console.log(ar) //1-// ['a', 'b', 'c']
ar = ['12','11']
console.log(ar) //2-// ['12', '11']
return ar
}
console.log(changeArr(arr)) //3-// ['12', '11']
console.log(arr) //4-// ['a', 'b', 'c']
//now I expect the forth console output to be ['12','11'] here because it is an object
【问题讨论】:
-
您已经为引用分配了一个新数组,使其成为一个新对象。
-
JavaScript 总是按值传递。但是,对象的 值 是它的引用。不过,如果您重新分配 变量,则不会更改 引用末尾的对象。
标签: javascript arrays pass-by-reference pass-by-value primitive-types