关于数据类型的小题
优质
小牛编辑
131浏览
2023-12-01
以下代码片段输出结果是什么?
var a = 1;
var b = {value: 1};
var c = new Number(1);
function foo(v){
v.value = "new Value";
}
foo(a);
foo(b);
foo(c);
console.log('a:',a)
console.log('b:',b)
console.log('c:',c)
a++
b++
c++
console.log('a++:', a)
console.log('b++:', b)
console.log('c++:', c)
foo(a);
foo(b);
foo(c);
console.log('foo(a):',a)
console.log('foo(b):',b)
console.log('foo(c):',c)
结果
a: 1
b: {value: "new Value"}
c: Number {1, value: "new Value"}
a++: 2
b++: NaN
c++: 2
foo(a): 2
foo(b): NaN
foo(c): 2
分析与思考
这个题是我自己在写JavaScript基础之数据类型时自己想的,究根结底就一个问题:原始数据类型和引用数据类型在运算和参数传递时究竟如何传递的
foo
操作之前:a/b/c分别是原始数据类型/引用数据类型/引用数据类型foo
操作之后:a为原始数据类型,不变;b为指针,value
的值被重置为new Value
;c为指针,被添加一个value
的属性++
操作之后:a++
操作本质为a = a + 1
;所以a/b/c均为原始数据类型- 再次
foo
操作之后:三个原始数据类型,所以都不变