变量类型和转换

2020-03-24  本文已影响0人  talent_ray

变量类型

通过typeof识别类型

对以上九种类型的识别为
boolean、number、string、symbol、undefined、object、object、function
所以typeof只能运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回'object',有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符

instanceof

判断一个对象与构造函数是否在一个原型链上

const Person = function(){}
const p1 = new Person()
p1 instanceof Person // true

var str = 'hello word'
str instanceof String // false
var str2 = new String('hello word')
str2 instanceof String // true

instanceof 方法要求开发者明确地确认对象为某特定类型,所以也有它的局限性

通过typeof + Object.prototype.toString判断

如果是原始类型,他会将原始类型包装为引用类型,然后调用对应方法

 /**
   * 类型判断
   */
 function getType(val){
   // 先处理null
   if(val === null){
       return 'null'
   }
   // 判断是不是基础类型
   const typeOfT = typeof val
   if(typeOfT !== 'object'){
     return typeOfT
   }
   // 处理引用类型
   const tmp = {
     '[object object]' : 'object',
     '[object Array]' :  'array',
     // 包装类型
     '[object String]' : 'object - string',
     '[object Number]' : 'object - number',
     '[object Boolean]' : 'object - boolean'
   }
   const typeStr = Object.prototype.toString().call(val)
   return tmp[typeStr]
 }

变量的转换

变量在计算及运行过程中,会进行隐式的类型转换

转boolean

以下都为假值,其他所有值都转为true,包括所有对象(空对象,空数组)
false、undefiend、null、' '、NaN、0、-0

对象转基本类型

对象在转基本类型时,会调用'valueOf',需要转成字符类型时调用'toString'

var a = {
  valueOf() {
    return 0;
  },
  toString() {
    return '1';
  }
}

1 + a           // 1
'1'.concat(a)   //"11"

需要对类型转换更深入了解的可参考下面两篇文章

JS类型转换规则总结
JS隐射类型转换

上一篇下一篇

猜你喜欢

热点阅读