美文网首页
js变量类型

js变量类型

作者: 踩坑怪At芬达 | 来源:发表于2019-11-02 21:54 被阅读0次

    如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力

    常用的类型判断方法有
    • target.constructor === Object
      判断target变量的constructor是否为某个对象
    • typeof target
      返回target的值只能是number、string、undefined、boolean、function、object 其中一个
    • target instanceof Object
      判断target.proto 是否在Object.prototype原型链中存在
      target和Object必须都是object,并且Object必须有prototype(null,undefined是没有prototype的)
    • Object.prototype.toString.call(target)
    然后下面的表显示了4种类型检测方法的呈现结果

    总体来说要想很精准的判断target是否为某个类型,使用 target.constructor最为准确, typeof和Object.prototype.toString.call用来判断js常规类型比较好,其中后者更准确

    ==和===
    • == 会在比较的时候将类型强制转换后对比
    • === 比较的时候不会进行类型转换
    类型转换
    • 几种需要特别注意的转换结果:
      • Number('f') : NaN
      • Number('')/Number(' ')/Number(null): 0
      • Boolean(-1)/Boolean(''): false
      • Boolean({})/Boolean(' '):true
      • String({}): "[object Object]"
    • 什么时候触发类型转换
      当2个变量遇见 >、<、==、加减乘除、||、&& 时

    • 转换为什么?

      • 默认触发数值转换,可以理解为 Number(left) > Number(right)
      • +value: 触发数值转换 Number(value)
      • 当 left + right 中其中一个是字符串的话,触发字符串转换 String(left) + String(right)
      • ==:触发数值转换 Number(left) == Number(right)
      • null == right : null只同null和undefined相等,其他情况均false
      • !!:触发布尔转换
      • 数组: 数组先触发toString 然后在看对比对象进行再次转换
        • [1,2,3]+[4,5,6] : [1,2,3].toString()+[4,5,6].toString()
        • []+null+1: [].toString()+null+1 -> ''+null+1 -> "null"+1 -> "null1"
      • ||或&&:触发布尔
    • 几个特别的案例,可以想想为什么?

      • []!="" // false
      • NaN!=NaN //false
      • NaN===NaN //false
      • if({})、if([]) //true
      • if(0)、if('') //false

    如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力

    相关文章

      网友评论

          本文标题:js变量类型

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