美文网首页
JavaStript中如何判断数据类型

JavaStript中如何判断数据类型

作者: TerryTaotao | 来源:发表于2020-05-30 15:55 被阅读0次

    众所周知,js中的数据类型分为两种:原始类型(基本数据类型)和对象类型(引用数据类型)
    string、number、boolean、undefined、symbol都为基本数据类型,判断他们类型的方法用typeof 即可。

    其中,Symbol为ES6 引入的一种新的原始数据类型,表示独一无二的值,可以保证不会与其他属性名产生冲突。

    但是object、function、array,null情况比较复杂,如果使用typeof都会返回object。因此,引用类型的数据需要用到其他方法。

    这里插一句,null和undefined的差别:
    null类型只有一个特殊的值,那就是null,从逻辑的角度看,null类型表示一个空对象指针,应用场景就是,如果定义的变量是用来存放对象,那么最好将该对象初始化为null,而不是其他值。这样以来,我们就可以通过判断一个对象是否等于null来区分该对象是否是一个对象的引用。
    if(obj != null){//do something}
    undefined类型的值只有一个 为undefined,其实它是null派生出来的,因此,当我们在某些操作下他们就是相等的:
    console.log(undefined == null);//true
    console.log(undefined === null);//false
    但是在开发中,并不提倡将一个变量显示的声明为undefined,因为在未使用var声明变量的时候就会对其赋值为undefeated,这个就可以用来判断该值是否声明过。

    好了,咱们回到判断数据类型这个点。
    当我们需要判断复杂的数据类型时,就需要另一个方法,Object.prototype.toString().

    举个栗子就很好理解了:
    var arr = [ 1,2,3 ];
    arr.toString();//"1,2,3";
    //通过call指定arr数组为Object.prototype对象中的toString方法的上下文
    Object.prototype.toString.call(arr); //"[object Array]"

    Object.prototype中的toString方法是确实被继承下来了,但是很多东西总不会一层不变,作为儿子的数组重写了toString方法,所以直接调用数组对象上面的toString方法调用到的实际是重写后的方法,并不是Object.prototype中的toString方法。

    精确判断对象的类型

    JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:
    console.log(Object.prototype.toString.call(123)); //[object Number]
    console.log(Object.prototype.toString.call('123')); //[object String]
    console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
    console.log(Object.prototype.toString.call(true)); //[object Boolean]
    console.log(Object.prototype.toString.call({})); //[object Object]
    console.log(Object.prototype.toString.call([])); //[object Array]
    console.log(Object.prototype.toString.call(function(){})); //[object Function]
    console.log(Object.prototype.toString.call(null)); //[[object Null]]

    文中包含转载内容,https://www.cnblogs.com/bq-med/p/8796836.html
    侵权可删。

    相关文章

      网友评论

          本文标题:JavaStript中如何判断数据类型

          本文链接:https://www.haomeiwen.com/subject/jozczhtx.html