变量类型
分为:number、string、boolean、object、null、undefined、symbol。
注意:
(1) 其中null用typeof检测类型,显示的是object; (查阅了相关资料表明,这个是一个错误,JavaScript第一个版本的补遗),具体解释为:null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,而 null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。
● 000 一 对象类型
● 010 一 双精度类型
● 100 一 字符串类型
● 110 一 布尔类型
※ 我们可以通过:Object.prototype.toString.call(null); // 得到 [object Null]
(2) 当使用null == undefined 的时候是为true的,因为ECMAScript 规范认为,既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性。
(3) 对于null,当一个对象被赋值为null的时候,垃圾回收(也称为:GC)会择机回收该对象并释放内存。因此,如果需要释放某个对象,就把该对象设置为null,即表示该对象已经被清空,目前无效状态。
(4)undefind 表示一个变量自然的、最原始的状态值。
(5) symbol
一:由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。Symbol值作为对象属性名时,不能用点运算符。在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。
二:Symbol 数据类型的另一特点是隐藏性,for···in,object.keys() 不能访问。但是可以使用另外一个函数Object.getOwnPropertySymbols,该方法会返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
三:Symbol 数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。
四:Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象。也就是说,由于Symbol值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。
(先这样,想到再写写。。。)