总体来讲有 五种基本类型, 一个复杂类型, 一个新增 symbol
一. 常见的数据类型有 es5
1 基本类型: Number,String,Boolean,Null,undefined
引用类型: object (Object,Array,Function,Date,RegExp)
2 基本的数据类型是不可以改变的, 只有对象可以改变.
(1) 基本数据类型的检测用 typeof 操作符, 所有的返回值都是字符串; 可能有以下几种:'undefined','boolean','string','number','object','function'
(2) 其中, 使用 typeof 检测 object array date regexp 返回都是 object
自定义函数或者构造函数返回的是 function
null 返回的是 object
(3) null 和 undefined 的区别
1)null 是一个对象, typeof 返回 object, 这个是 JS 中的一个 bug, 在进行二进制转换过程中, 如果前三位都是 0, 则 ypeof 时就返回 object, 而 null 转换为二进制时所用的位都是 0
undefined 不是一个对象 typeof 返回的是 undefined
2)null 是一个关键字, undefined 不是关键字
3)null 转化为数字是 0 ,undefined 是 NaN
- Number(null) === 0 // true
- isNaN(Number(undefined)) === true // NaN
4)定义不同
JavaScript 权威指南: null 和 undefined 都表示 "值的空缺", 你可以认为 undefined 是表示系统级的, 出乎意料的或类似错误的值的空缺, 而 null 是表示程序级的, 正常的或在意料之中的值的空缺.
null: Null 类型, 代表 "空值", 代表一个空对象指针, 使用 typeof 运算得到 "object", 所以你可以认为它是一个特殊的对象值.
undefined: Undefined 类型, 当一个声明了一个变量未初始化时, 得到的就是 undefined.
null 是 JavaScript 的关键字, 可以认为是对象类型, 它是一个空对象指针, 和其它语言一样都是代表 "空值", 不过 undefined 却是 JavaScript 才有的. undefined 是在 ECMAScript 第三版引入的, 为了区分空指针对象和未初始化的变量, 它是一个预定义的全局变量. 没有返回值的函数返回为 undefined, 没有实参的形参也是 undefined.
null 和 undefined 相同点
1)都是值类型
2)转化为 Boolean 都为 false
- Boolean(null) === false // true
- Boolean(undefined) === false // true
null 进行比较 undefined
- null == undefined // true
- null === undefined // false
二. es6 新的数据结构 (参考 http://es6.ruanyifeng.com/#docs/set-map )
1.symbol 新引入的原始数据类型
1) 通过 Symbol(dscription)声明 表示独一无二的值
2)使用 typeof 检测为 symbol
3) 不能和其他值进行运算, 否则会有类型错误
4)作为对象的 key 要使用 放入 [ ] 中
- 2.map weakMap set WeakSet
- 1)map [ [a,b ],[ 2, 3] ]
键值对的集合, 但是 "键" 的范围不限于字符串, 各种类型的值 (包括对象) 都可以当作键.
也就是说, Object 结构提供了 "字符串 - 值" 的对应, Map 结构提供了 "值 - 值" 的对应, 是一种更完善的 Hash 结构实现. 如果你需要 "键值对" 的数据结构, Map 比 Object 更合适.
可以使用 size set get has delete clear keys values entries forEach
2)set
新的数据结构, 类似于数组.
特点: 成员值唯一, 没有重复的值, 不可使用数组的方法
可以使用 add delete has size keys values entries forEach
- // 去除数组的重复成员
- [...new Set(array)]
- // 字符串去重
- [...new Set('ababbc')].join('')
WeakSet 的成员只能是对象, 而不能是其他类型的值 ,
WeakSet 中的对象都是弱引用, 即垃圾回收机制不考虑 WeakSet 对该对象的引用, 也就是说, 如果其他对象都不再引用该对象, 那么垃圾回收机制会自动回收该对象所占用的内存, 不考虑该对象还存在于 WeakSet 之中
使用 typeof 检测为 object
instanceof 可以进行区分
来源: https://www.cnblogs.com/lizhiwei8/p/11515686.html