- typeof
<!--简单数据类型-->
const str = 'abc'
console.log(typeof str)
const num = 123
console.log(typeof num)
console.log(typeof true)
console.log(typeof undefined)
console.log(typeof null)
<!--引用数据类型-->
const arr = [1, 2, 3]
console.log(typeof arr)
const obj = { name: 'zs' }
console.log(typeof obj)
const fn = function () { }
console.log(typeof fn)
<!--总结-->
简单数据类型:
通过typeof判断除了null都能拿到正确的值,而且都是字符串类型
null返回object原理是这样的。不同的对象在底层都表示为二进制,在javascript中二进制前三位都为0的话会被判断为object类型,
null的二进制表示全0,自然前三位也是0,所以执行typeof时会返回“object”
引用数据类型:
可以看到数组并没有返回array而是object
原因是ECMAScript中规定所有引用类型都是Object的实例,所以用typeof返回的是object
- constructor
const arr = [1, 2, 3]
const obj = { name: 'zs' }
const fn = function () { }
console.log(arr.constructor === Array)
console.log(obj.constructor === Object)
console.log(fn.constructor === Function)
<!--construtor判断一个实例是否为某个构造函数 返回布尔值-->
- instanceof
const arr = [1, 2, 3]
const obj = { name: 'zs' }
const fn = function () { }
console.log(arr instanceof Array)
console.log(obj instanceof Object)
console.log(fn instanceof Function)
<!--判断一个实例是否为某个构造函数的实例化对象 返回布尔值-->
- Array.isArray()
const arr = [1, 2, 3]
console.log(Array.isArray(arr))
<!--
判断是不是一个数组,返回布尔值
注意:有兼容问题 ie8以上才行
-->