问题分享:Js引用类型赋值
栏目: JavaScript · 发布时间: 6年前
内容简介:会输出什么呢?答案是:值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol引用数据类型:对象(Object)、数组(Array)、函数(Function)。
function changeAgeAndReference(person){ person . age = 25; person = { nage : 'John', age : 50 }; return person ; } var personObj1={ name : 'Alex', age : 30 } var personObj2 = changeAgeAndReference(personObj1); console.log(personObj1) console.log(personObj1) 复制代码
会输出什么呢?答案是:
{name: "Alex", age: 25} {nage: "John", age: 50} 复制代码
要理解答案为什么是25和50 要理解Js变量赋值问题:
1. Js有两类数据类型:值类型(基本类型)和引用类型
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值; 引用类型的值是保存在内存中的对象,在操作对象时,实际上是在操作对象的引用而不是实际的对象
2. 变量复制
基本类型复制:举个栗子
var num1 = 5; var num2 = num1; 复制代码
num1 中保存的值是 5。当使用 num1 的值来初始化 num2 时,num2 中也保存了值 5。但 num2 中的 5 与 num1 中的 5 是完全独立的,该值只是 num1 中 5 的一个副本。此后,这两个变量可以参与任 何操作而不会相互影响
引用类型复制:举个栗子
var obj1 = new Object(); var obj2 = obj1; obj1.name = "Nicholas"; alert(obj2.name); 复制代码
变量 obj1 保存了一个对象的新实例。然后,这个值被复制到了 obj2 中;换句话说,obj1 和 obj2 都指向同一个对象。这样,当为 obj1 添加 name 属性后,可以通过 obj2 来访问这个属性, 因为这两个变量引用的都是同一个对象
现在让我们回到问题当中
function changeAgeAndReference(person){ person . age = 25; person = { nage : 'John', age : 50 }; return person ; } var personObj1={ name : 'Alex', age : 30 } var personObj2 = changeAgeAndReference(personObj1); console.log(personObj1) console.log(personObj1) 复制代码
var personObj2 = changeAgeAndReference(personObj1)相当于:
var person = personObj1 复制代码
personObj1和 person 都指向同一个对象,改变person的属性age也就改变了personObj1的age; 所以 personObj1 变为 {name: "Alex", age: 25}
函数内部:
person = { nage : 'John', age : 50 }; //相当于 var person == { nage : 'John', age : 50 }; 复制代码
person被重新赋值,已经不指向之前的的对象了,所以return 的是 {nage: "John", age: 50}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python3多目标赋值及共享引用注意事项
- 少说话多写代码之Python学习023——赋值语句的用户02(链式赋值、增量赋值)
- 理解Golang多重赋值
- ES6 解构赋值
- 【ES6复习】解构赋值
- ES6学习解构赋值
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring Into HTML and CSS
Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99
The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!