为什么用{}.toString.call(obj)来判断数据类型

先看一下typeof

var a;
console.log("a:"+typeof a)//a:undefined
 var b=null;
console.log("b:"+typeof  b)//b:object
 var c=undefined;
console.log("c:"+typeof c)//c:undefined
 var d=new Object();
console.log("d:"+typeof d)//d:object
 var e=function(){};
console.log("e:"+typeof e)//e:function
 var f={};
console.log("f:"+typeof f)//f:object
 var g="";
console.log("g:"+typeof g)//g:string
 var h=[];
console.log("h:"+typeof h)//h:object
 var i=true;
console.log("i:"+typeof i)//i:boolean
 var j=123
 console.log("j:"+typeof j)//j:number
 var k=NaN;
console.log("k:"+typeof  k)//k:number
 var l=/^[-+]?\d+$/;
console.log("l:"+typeof  l)//l:object
按照上面的打印结果,总结出以下几点:

1 除了函数 function,typeof  ‘引用类型’ 都是object   例如type [];typeof  /^\d$/ ;typeof null

2 typeof null 为object ,typeof NaN 是number,typeof undefined是undefined,typeof  function(){}是function

3 转换数字的常见用法“10”-0,如果没有转换成功则返回NaN,由于NaN的一个特性NaN!=NaN

  故判断转换成功与否的常见做法是:('10sss'-0)==('10sss'-0)//结果为假 *******

再看看constructor和instanceof

instanceof 用于判断一个对象是否是某个类的实例

constructor 用于判断对象的原型,该属性返回对创建此对象的数组函数的引用。

   console.log("-------------------Number----------------")
    var A=123;
   console.log(A instanceof Number)//false
    console.log(A.constructor===Number)//true
    console.log(A.constructor)
    console.log("-----------------String------------------")
    var B="javascript";
   console.log(B instanceof String)//false
    console.log(B.constructor===String)//true
    console.log(B.constructor)
   console.log("-----------------Boolean------------------")
    var C=true;
   console.log(C instanceof Boolean)//false
    console.log(C.constructor===Boolean)//true
    console.log(C.constructor)
    console.log("------------------null------------------------")
   var D=null
    console.log(D instanceof Object)//false
//    console.log(D.constructor===Object)//报错 null没有构造函数
   //console.log(D.constructor)//报错
console.log("----------------------undefined---------------------")
    var E=undefined;
//   console.log(E instanceof undefined)//报错 没有undefined数据类
    console.log("---------------------function---------------------")
    var F=function(){}
    console.log(F instanceof Function)//true
    console.log(F.constructor=== Function)//true
    console.log(F.constructor)
console.log("---------------------new function----------------------")
    function SB(){}
    var G=new SB();
    console.log(G instanceof SB)//true
    console.log(G.constructor==SB)//true
    console.log(G.constructor)
console.log("----------------------new Object------------------------")
    var H=new Object;
    console.log(H instanceof Object)//true
    console.log(H.constructor==Object)//true
    console.log(H.constructor)
    console.log("---------------------Array---------------------------")
    var I=[];
    var H=new Array();
    console.log(I instanceof Array);//true
    console.log(H instanceof Array);//true
    console.log(I.constructor==Array)//true
    console.log(H.constructor==Array)//true
    console.log(H.constructor)//true
    console.log(I.constructor)//true
    console.log("--------------------------------JSON---------------")
    var J={
        "sb":"javascript",
        "node":"very SB"
    }
    console.log(J instanceof Object)//true
    console.log(J.constructor===Object)//true
    console.log(J.constructort)//true

再看看{}.toString.call(obj)

console.log({}.toString.call(1))//[object Number]
console.log({}.toString.call("11"))//[object String]
console.log({}.toString.call(/123/))//[object RegExp]
console.log({}.toString.call({}))//[object Object]
console.log({}.toString.call(function(){}))//[object Function]
console.log({}.toString.call([]))//[object Array]
console.log({}.toString.call(true))//[object Boolean]
console.log({}.toString.call(new Date()))//[object Date]
console.log({}.toString.call(new Error()))//[object Error]
console.log({}.toString.call(null))//[object Null]
console.log({}.toString.call(undefined))//[object Undefined]
console.log(String(undefined))//undefined
console.log(String(null))//null

参照:https://www.talkingcoder.com/article/6333557442705696719









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值