js类型检测
js数据类型 7 + 1
- number
- string
- boolean
- null
- undefined
- symbol
- bigint
- object
typeof
- typeof 1 // ‘number’
- typeof ‘1’ // ‘string’
- typeof undefined // ‘undefined’
- typeof true // ‘boolean’
- typeof Symbol() // ‘symbol’
- typeof b // b 没有声明,但是还会显示 undefined
- typeof 对于对象,除了函数都会显示 object
- typeof [] // ‘object’
- typeof {} // ‘object’
- typeof /1/ // ‘object’
- typeof function(){} // ‘function’
- 对于 null 来说,虽然它是基本类型,但是会显示 object ,这是⼀个存在
- 很久了的 Bug
- typeof null // ‘object’
instanceof
instanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的
原型链中是不是能找到类型的 prototype
toString
可以通过 Object.prototype.toString.call(xx) 。这样我们就可以获得类似 [object Type] 的字符串。
null和undefined区别?
- Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。用法
- 变量被声明了,但没有赋值时,就等于undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回undefined。
- Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。用法作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点
null不是对象
虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。