本文共 2500 字,大约阅读时间需要 8 分钟。
ES设计了6种原始值:Undefined、Null、Boolean、Number、String、Symbol。
保存原始值的变量是按值访问,操作存储在变量内存中的实际值。
原始值是不可以改变的。
原始值不能有属性。
// 原始值{ let one1 = 'Tom'; console.log(one1,one1.age); //Tom undefined 它的属性值是不会被打印出来的}
原始值可以包装类型
1、为了方便操作原始值,ES6提供了3种特殊的引用类型:Boolean、Number、String。
2、每当用到原始值的方法和属性时,后台会创建一个临时的包装类型对象,从而得以使用原始值的各种方法。
// 原始值包装类型{ let s1 = "hello world"; let s2 = s1.substr(0,5); console.log(s1,s2); //hello world hello}
后台执行的步骤:
a) 创建一个包含原始值的String类型临时实例; b) 调用该临时实例的特定方法; c) 销毁该临时实例;typeof检查原始值可得出其具体类型,但检查对象都是object。
{ let value = '200'; let number = Number(value); // Number()强制转换函数 console.log(typeof number); // number }{ let value = '200'; let number = new Number(value); // new Number()构造函数 console.log(typeof number); // object}{ let n1 = 100; let n2 = new Number(n1); console.log(typeof n2); // object 所有对象的类型都是object console.log(typeof n2.valueOf()); // number valueof()把包装对象的原始值取出来了。 console.log(n1 + n2); // 200 console.log(n1 + n2.valueOf()); // 200}
ES不允许直接访问对象的内存空间。
实际操作对象时,访问的是保存对象的内存地址,即该对象的引用。
引用值(对象)可以随时添加、修改和删除其属性和方法。
// 引用值{ let person = new Object(); person.name = 'John'; person.showMe = function(){ console.log("Hi,I'm " + this.name); } person.showMe(); //Hi,I'm John}
本质上无区别,都是将一个变量中保存的信息赋值给另一个变量。
但对象变量中保存的是地址,所以它传递的是地址,改变其中一个变量的值,另一个变量会相继改变,因为它们都指向同一个地址。
{ let a = 100; let b = a; b++; console.log(a,b); //100 101}{ let ob = { value:100}; let oa = ob; oa.value = 200; console.log(ob.value,oa.value); //200 200}
typeof检查原始值可得出其类型,但检查引用值就不能具体判断出其类型,因为都为object。
// typeof { let s = "Nick"; console.log(typeof s); //string let b = true; console.log(typeof b); //boolean let i = 22; console.log(typeof i); //number let u; console.log(typeof u); //undefined let n = null; console.log(typeof n); //object let obj = new Object(); console.log(typeof obj); //object let arr = new Array(); console.log(typeof arr); //object let a = [1, 2, 3]; console.log(typeof a); //object}
typeof对于引用值意义不大,通常采用instanceof操作符来判断引用值的类型。
// instanceof{ let obj = new Object(); console.log(obj instanceof Object); //true let arr = new Array(); console.log(arr instanceof Array); //true let a = [1, 2, 3]; console.log(a instanceof Array); //true}
转载地址:http://zugwb.baihongyu.com/