Web前端之路让前端飞

JavaScript中基本类型和引用类型的值

2017-07-24  本文已影响24人  baiying

JavaScript中包含两种数据类型的值:基本类型和引用类型

定义

访问方式

动态属性

可以为引用类型动态地添加属性,但是基本类型不可以,虽然不会出错,但不会为其添加上属性.

let obj = new Object();
obj.name = "tom";
let name = 'person';
person.age = 12;
alert(obj.name); //tom
alert(name.age); // undefined

复制变量的值

基本类型复制:
会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,复制完成后num1和num2完全独立,各自的任何操作都不会影响对方

let num1 = 5;
let num2 = num1;
num2 ++;
alert(num1);//5
alert(num2);//6

引用类型复制
当从一个变量到另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放到新变量分配的位置上,但是这个值的副本是一个指针,复制结束后,两个指针指向存储在堆中的同一个对象,因此一个的操作会直接影响另一个.

let obj1 = new Object();
let obj2 = obj1;
obj1.name = 'tom';
alert(obj2.name);//tom

传递参数

ECMAScript中所有函数的参数都是按值传递.即使引用类型是按引用访问,但在参数传递时依然是按值传递.
可以把函数的参数想象成局部变量.

检测类型

typeof:确定一个变量是字符串,数值,布尔值,还是undefined.但如果测一个引用类型或者NULL我们只会得到object,为了确定一个引用类型到底是哪种引用类型,我们会用instanceof

let a = 'haha';
let b = new Object();
let c = null;
let d = [1,2];
alert(typeof a);//string
alert(typeof c);//object
alert(b instanceof Object); //true
alert(d instanceof Array); //true

存储位置

基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中.
引用类型的值是对象保存在堆内存中.

上一篇 下一篇

猜你喜欢

热点阅读