Skip to content

数据类型分类

数据类型

  • 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