js变量类型

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

常用的类型判断方法有
  • 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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容