JavaScript中的typeof和instanceof

一、typeof

1. 基本介绍

描述:typeof用于判断一个变量的类型,返回值主要有:“number”、 “string”、“boolean”、“object”、“function”、“undefined”、“symbol”
语法:typeof operand
operand:要被判断类型的变量
返回值:operand的类型

2. 具体使用

  console.log(typeof 1); // number
  console.log(typeof '1');// string
  console.log(typeof false);// boolean
  console.log(typeof {});// object
  console.log(typeof function () {

  });// function
  let a
  console.log(typeof a);// undefined
  let b = Symbol()
  console.log(typeof b);// symbol

3. 缺点

typeof在判断基本类型的时候是非常好用的,但是在判断引用类型的时候就有些捉襟见肘了
例如:

  console.log(typeof {});// object
  console.log(typeof []);// object
  console.log(typeof null);// object

这个时候就应该使用instanceof了

二、instanceof

1. 基本介绍

描述:instanceof用来检查A的原型链上是否存在B的原型,或者说,A是不是另一个B的实例
语法:A instanceof B
A:要被判断类型的变量
B:原型对象
返回值:true or false

2. 具体使用

  console.log([] instanceof Array); // true
  console.log([] instanceof Object);// true
  console.log({} instanceof Object);// true
  console.log(null instanceof Object);//false

因为instanceof是查找整个原型链的,所以只要是存在原型链上的原型对象,都可以被查找到。
例如:

  let Person = function (name) {
    this.name = name
  }
  let Friend = function (age) {
    this.age = age
  }
  Friend.prototype = new Person('lis') // 原型继承
  let tom = new Friend(16)
  console.log(tom instanceof Friend)
  console.log(tom instanceof Person)

因为Person的原型在tom的原型链上,所以tom instanceof Person为true,这也是为什么[] instanceof Object同样为true

3. 缺点

因为instanceof用来检查A的原型链上是否存在B的原型所以通过实例化得到的对象都可以判断到它的实例对象,但是不是通过实例化得到的对象就无法判断了。
例如:

  console.log(1 instanceof Number); // false
  let num = new Number('1')
  console.log(num instanceof Number); // true
  console.log('哈哈' instanceof String); //false
  let str = new String('哈哈')
  console.log(str instanceof String); // true

所以对一些基本数据类型进行判断的时候,建议使用 typeof

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值