本文最后更新于 792 天前,其中的信息可能已经有所发展或是发生改变。
总结:
1、原始值,表示单一的数据,如10,“abc”,true等。
1.1、 ES的6种原始值: Undefined、Null、Boolean、Number、String、Symbol
1.2、 保存原始值的变量是按值访问,操作存储在变量内存中的实际值
2、引用值,表示有多个值(原始值或其他引用值)构成的对象
2.1、 ES不允许直接访问对象的内存空间。
2.2、 实际操作对象时,访问的是保存对象的内存地址,即该对象的引用。
3、动态属性
3.1、 原始值是不可改变的。
3.2、 引用值(对象)可以随时添加、修改和删除它的属性和方法。
如:
let person = new Object();
person.name = "小明";
person.sayhello= function () {
console.log("Hello, I'm " + this.name);
};
console.log(person)
运行结果:{ name: ‘小明’, sayhello: [Function (anonymous)] }
3.3、 原始值不能有属性
如:
let one = "小明";
one.age = 20;
console.log(one, one.age);
运行结果:
小明 undefined
4、值传递
4.1、 赋值,即将值复制给变量的过程
4.2、 原始值与引用值本质上没有区别,都是将一个变量中保存的信息复制给另一个变量,如:
let a = 100;
let b = a;
b++;
console.log(a, b);
运行结果:
100 101
let obj1 = { value: 100 };
let obj2 = obj1;
obj2.value = 200;
console.log(obj1.value, obj2.value);
运行结果:
200 200
5、确定类型
5.1、 方法:通过typeof操作符来判断一个值的类型
如:
let a = null;
let b = new Object();
let c = [1, 2, 3];
let d = "abcds";
let e;
let f = 123
let g = true
console.log(typeof a); // object
console.log(typeof b); // object
console.log(typeof c); // object
console.log(typeof d); // string
console.log(typeof e); // undefined
console.log(typeof f); // number
console.log(typeof g); // boolean
5.2、 对于引用值,typeof的意义不大,通常采用instanceof操作符,判断引用值是否为某个构造函数的实例。
如:
let obj = new Object();
let a = [1, 2, 3];
console.log(obj instanceof Object); // true
console.log(a instanceof Array); // true
6、原始值包装类型
为了方便操作原始值,ES提供了3中特殊的引用类型:Boolean、Number和String。每当用到某个原始值的方法或属性时,后台会创建一个相应的原始值包装类型的对象,从而暴露出操作原始值的各种方法。如:
let s1 = "hello world";
let s2 = s1.substr(0, 5);
后台执行步骤:
(1)创建一个包含了原始值的String类型的实例s1;
(2)s2调用s1实例上的substr方法;
(3)销毁s1实例;