码迷,mamicode.com
首页 > 其他好文 > 详细

值类型和引用类型的区别?

时间:2020-04-18 17:15:44      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:垃圾   body   function   func   注意   一个   str   opera   tin   

JS的数据类型都有哪些?

  • 值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空值(null)、未定义(undefined)、转义字符、Symbol(ES6引入了一种新的原始数据类型,表示独一无二的值)。

  • 引用数据类型:对象(Object)、数组(Array)、函数(Function)。

值类型和引用类型的区别?

(1) 存储位置不一样

① 值类型的变量会保存在栈内存中,如果在一个函数中声明一个值类型的变量,那么这个变量当函数执行结束之后会自动销毁

② 引用类型的变量名会保存在栈内存中,但是变量值会存储在堆内存中,引用类型的变量不会自动销毁,当没有引用变量引用它时,系统的垃圾回收机制会回收它

栈内存堆内存
a = 10,b = 20;  
arr [10,20,30,40,50]

(2) 复制方式不一样

① 值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a

② 引用类型的变量直接赋值实际上是传递引用,只是浅复制

var arr = [10,20,30];
var array = arr;
array[0] = 1;
console.log(arr,array);

输出结果arr和array都会是[1,20,30],要想实现深复制,必须在堆内存中再开辟一块空间

(3) 值类型无法添加属性和方法

var per = "web";
web.age = 10;
web.eat = function(){
console.log(‘eating‘);
}
console.log(web.age);
console.log(web.eat);

结果都会返回undefined

(4) 引用类型可以添加属性和方法

var per = {};
per.age = 18;
per.eat = function(){
console.log("eated");
}
console.log(per.age);
console.log(per.eat);

结果person.age=18,person.eat返回一个函数

(5) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。比较的时候注意”==”和”===”,双等号(==)在做比较的时候做了类型转换,而全等号(===)是值和类型相等是才能相等

var stu1 = ‘{}‘;
var stu2 = ‘{}‘;
console.log(stu1===stu2);

结果返回true,两个相同字符串的比较,是值(‘{}’)的比较,完全相等

(6)引用类型的比较是引用地址的比较

var stu1 = {};
var stu2 = {};
console.log(stu1===stu2);

结果返回false,两个空对象在堆内存中的地址不一样,所以即使两个一模一样的对象也不一定相等

值类型和引用类型的区别?

标签:垃圾   body   function   func   注意   一个   str   opera   tin   

原文地址:https://www.cnblogs.com/hello9102/p/12726797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!