数据类型分类
数据类型
- number
- string
- boolean
- null
- undefined
- object
- symbol
- bigint
对象
内置对象
- 数据封装类对象:Object,Array,Boolean,Number,String
- 其他对象:Function,Arguments,Math,Data,RegExp,Error
- ES6新增对象:Symbol,Map,Set,Promise,Proxy,Reflect
误区
字符串不可变?
直接赋值的字符串字面量不可变,但必要的时候 JS 会把字符串字面量转换成构造形式,也就是一个对象,例如 'abc'.length
中的 'abc'
会被隐式转换为 new String('abc')
同样的事情也发生在数字字面量上,例如 0.123.toFixed(2)
隐式转换
空数组的转换
js
console.log(false == []) // true
console.log(false == ![]) // true
一个布尔值和一个对象进行比较时,会将这两个值转换为数字进行最后的比较,所以
false == []
!会将数值转为布尔值且优先级更高,所以
false == ![]
JSON.stringify
js
const name1 = JSON.stringify('fatfish') // => '"fatfish"'
const name2 = 'fatfish'
console.log(name1 === name2) // '"fatfish"' === 'fatfish' => false