JS 判断数据类型

众所周知JS的数据类型原来有七种,ES2020 引入了一种新的数据类型 BigInt(大整数),所以共有8种

使用typeof

/**5个基本**/
console.log(typeof 'str')  // > string
console.log(typeof 1) // > number
console.log(typeof true) // > boolean
console.log(typeof Symbol()) // > symbol
console.log(typeof 123n) // > bigint
/**2个空**/
/*undefined未定义,变量不存在或者变量定义后没赋值*/
console.log(typeof undefined) // > undefined 
/*null*/存在变量,但是值被赋予了null(空)
console.log(typeof null) // > object 
/**对象类型**/
console.log(typeof {}) // > object
console.log(typeof []) // > object
console.log(typeof function(){}) // > function 

可以看到,对于5个基本类型和undefined使用时效果正常,其他都效果不佳。

 

Object.prototype.toString.call()

let [
    string,
    number,
    boolean,
    symbol,
    bigint,
    unde,
    nu,
    object,
    array,
    fun 
    ] = 
    ['string',
    1,
    true,
    Symbol(),
    123n,
    undefined,
    null,
    {},
    [],
    function(){}]


let value = [string,number,boolean,symbol,bigint,unde,nu,object,array,fun]

value.forEach((ele) => {
    let toString = Object.prototype.toString.call(ele)
    console.log(toString)
})
// [object String]
// [object Number]
// [object Boolean]
// [object Symbol]
// [object BigInt]
// [object Undefined]
// [object Null]
// [object Object]
// [object Array]
// [object Function]

  我们可以看到,Object.prototype.toString.call()的方法返回的字符串可以稳定的得出是何种数据类型。

 

用是否为目标构造函数实例的方式判断类型

instanceof 已知对象类型来用(查到父级和以上)

console.log(object instanceof Object) 
console.log(fun instanceof Function)
console.log(array instanceof Array)
// 都为true

  只能用于对象类型的判断

 

constructor,(查到父级结束)

console.log(array.constructor === Array)  // true
console.log(object.constructor === Object)  // true
console.log(fun.constructor === Function)  // true

  也可以对Date日期等类型使用。

 

posted @ 2022-02-14 11:40  时间观测者  阅读(69)  评论(0编辑  收藏  举报