原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).
虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?
在下面的代码中,我们传递一个对象.所以,根据javascript我们传递了一个引用和操作.
var a = new Number(10);
x(a);
alert(a);
function x(n) {
n = n + 2;
}
Run Code Online (Sandbox Code Playgroud)
但是提醒10而不是12.为什么?
我是JavaScript的新手,我认为对象是通过引用传递的。
我期望的输出是:
{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }
Run Code Online (Sandbox Code Playgroud)
获得的输出:
{ one: 1 } { one: 1 }
{ two: 2 } { one: 1 }
Run Code Online (Sandbox Code Playgroud)
什么时候b引用地址a,为什么b还{ one: 1 }
{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }
Run Code Online (Sandbox Code Playgroud)
我经常不会感到难过,但我现在只是在失言.
使用Chrome 37.0.2062.120 m
有人可以向我解释为什么我console.log();会报告这些结果吗?
JS代码
var some_obj = {min:1};
var another_obj = {};
console.log(some_obj);
another_obj['sometarget'] = some_obj; // <- What is this sorcery?!?!?
another_obj['sometarget']['required'] = true;
console.log(some_obj);
Run Code Online (Sandbox Code Playgroud)
console.log()输出
Object {min: 1}
Object {min: 1, required: true}
Run Code Online (Sandbox Code Playgroud)
的jsfiddle
var a = [3, 4, 5];
var b = [6, 7, 8];
function why() {
b = a;
b[0] = 1;
alert(a[0] + ' ' + b[0]);
}
why();
Run Code Online (Sandbox Code Playgroud)
结果是a[0]=1, b[0]=1;.好像JavaScript正在通过引用传递?
但在这种情况下:
var a = [3, 4, 5];
var b = [6, 7, 8];
function why() {
b = a;
b = [1, 2, 3];
alert(a + ' ' + b);
}
why();
Run Code Online (Sandbox Code Playgroud)
结果是a=[3,4,5]和b = [1,2,3].它为什么通过价值?如何避免通过引用传递?