问题分享: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 的一个副本。此后,这两个变量可以参与任 何操作而不会相互影响

问题分享:Js引用类型赋值

引用类型复制:举个栗子

var obj1 = new Object(); 
var obj2 = obj1; 
obj1.name = "Nicholas"; 
alert(obj2.name); 
复制代码

变量 obj1 保存了一个对象的新实例。然后,这个值被复制到了 obj2 中;换句话说,obj1 和 obj2 都指向同一个对象。这样,当为 obj1 添加 name 属性后,可以通过 obj2 来访问这个属性, 因为这两个变量引用的都是同一个对象

问题分享:Js引用类型赋值

现在让我们回到问题当中

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}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spring Into HTML and CSS

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》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试