js数值为引用类型(object), 传递参数(参数为object)按引用传递,并非书中按值传递
2017-03-09 15:35
459 查看
知识:
基本数据类型( Undefined、Null、 Boolean、Number、String);这5类基本数据类型是按值访问,因为可以操作变量中的实际值。
引用数据类型(object);js与其他语言不同,不允许直接访问内存中的位置,也就是说,不能直接操作object的内存空间。在操作object时实际上是在操作object的引用,而不是实际的object。故,引用类型的值是按引用访问的。
一、基本数值类型的操作与理解
这里num1 和 num2 除了值相等以外,没有半毛钱关系。
var obj2 = obj1;
obj1.age= 12;
此时,obj1 和 obj2都是{age: 12}
若是如下代码
此时obj1 和 obj2 都是 {age:12,name:“wang”}
obj1 和 obj2 类似与我们唯一识别的身份证号或者学号,对他们操作都是直接操作堆栈中的Object。
但是,当我们
这一步的结果使我觉得 《js高级程序设计》第三版4.1.3参数传递中 译者与我的观点不一样。
书中
我认为函数setName中的第一行,并不是按值传递,而是直接按引用传递,修改的person创建的Object的name。第二、三行重新new 了一个全新的Object,跟外面的person的Object没有半点关系。只不过是在函数里边而已,对person来说,第二行是否在函数中,并没有任何关系。
基本数据类型( Undefined、Null、 Boolean、Number、String);这5类基本数据类型是按值访问,因为可以操作变量中的实际值。
引用数据类型(object);js与其他语言不同,不允许直接访问内存中的位置,也就是说,不能直接操作object的内存空间。在操作object时实际上是在操作object的引用,而不是实际的object。故,引用类型的值是按引用访问的。
一、基本数值类型的操作与理解
var num1 = 6; var num2 = num1;
这里num1 和 num2 除了值相等以外,没有半毛钱关系。
二、引用数据类型的操作与理解
var obj1 = new Object();var obj2 = obj1;
obj1.age= 12;
此时,obj1 和 obj2都是{age: 12}
若是如下代码
var obj1 = new Object(); var obj2 = obj1; obj1.age= 12; obj2.name='wang';
此时obj1 和 obj2 都是 {age:12,name:“wang”}
obj1 和 obj2 类似与我们唯一识别的身份证号或者学号,对他们操作都是直接操作堆栈中的Object。
但是,当我们
var obj1 = new Object(); var obj2 = obj1; obj1.age= 12; //obj1 和 obj2 都是 {age:12} obj2.name='wang'; //obj1 和 obj2 都是 {age:12,name:“wang”} obj2 = new Object();//这一步,obj2有一个全新的Object,就跟之前的obj1不在有关系 obj2.color = 'red';//obj1 是 {age:12,name:“wang”}, obj2是{color:"red"} console.log(obj1);//{age:12,name:“wang”} console.log(obj2);//{color:"red"}
这一步的结果使我觉得 《js高级程序设计》第三版4.1.3参数传递中 译者与我的观点不一样。
书中
function setName(obj) { obj.name = 'Nicholas'; obj = new Object(); obj.name = 'Greg'; } var person = new Object(); setName(person); console.log(person.name);//'Nicholas'
我认为函数setName中的第一行,并不是按值传递,而是直接按引用传递,修改的person创建的Object的name。第二、三行重新new 了一个全新的Object,跟外面的person的Object没有半点关系。只不过是在函数里边而已,对person来说,第二行是否在函数中,并没有任何关系。
相关文章推荐
- js 函数传递参数类型问题(基本类型和引用类型)
- Js从头学起(基本数据类型和引用类型的参数传递详细分析)
- JS基本数据类型和引用类型的参数传递详细分析
- 深入解析js中基本数据类型与引用类型,函数参数传递的区别
- Js从头学起(详细分析基本数据类型和引用类型的参数传递)
- js 基本类型和引用类型 变量复制 参数传递
- Js从头学起(基本数据类型和引用类型的参数传递详细分析)
- 通过js引用地址传递参数
- 传递引用类型参数(C# 编程指南)
- 引用类型和值类型作为参数的值是否会传递的浅解
- 通过值传递引用类型和通过引用传递引用类型参数的区别
- C#中的参数传递:值类型(value type)和引用类型(reference type)
- java 传递参数 “引用是一种数据类型”,“参数是引用的一个拷贝”
- 反射技术动态调用方法中的引用类型参数传递 (转)
- 引用类型参数的按值传递
- 【转】C++函数——指针和引用类型的参数传递
- C# 值类型 引用类型 作为参数传递区别
- C#中string和Object类型是引用传递
- C#中的参数传递:值类型(value type)和引用类型(reference type)
- C#中的参数传递:值类型(value type)和引用类型(reference type)--精要