typeof 和 instanceof

基础笔记第二篇就已经了解过了 typeof 操作符的用法:用来判断一个变量哪种数据类型。

虽然在一般情况下 typeof 就已经可以满足一些使用需求,但是像如下情况,使用 typeof 就不太好区分了:

let arr = [1, 2, 3]
let obj = {};
console.log(typeof arr);  // object
console.log(typeof obj);  // object

可以看出,我们显然是想要知道 arr 是不是 Array 类型,但是 typeof 却并不能满足我们这个需求。这时就需要用到 instanceof 操作符了。

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。可以理解为是否是由某个构造函数构成。在以上例子中使用 instanceof 操作符:

let arr = [1, 2, 3]
let obj = {};
console.log(arr instanceof Array);  // true
console.log(arr instanceof Object);  // true
console.log(obj instanceof Array);  // false
console.log(obj instanceof Object);  // true

当 instanceof 使用于基础数据类型时,容易出错:

let num = 1;
let numo = new Number(1);
console.log(num instanceof Number);  // false
console.log(numo instanceof Number);  // true
console.log(typeof num);  // number

let str = 'this';
let stro = new String('this');
console.log(str instanceof String);  // false
console.log(stro instanceof String);  // true
console.log(typeof str);  // string

let bool = true;
let boolo = new Boolean(true);
console.log(bool instanceof Boolean);  // false
console.log(boolo instanceof Boolean);  // true
console.log(typeof bool);  // boolean

 可以看出 instanceof 适用于引用数据类型原始数据类型则使用 typeof 更好。

 但是使用 typeof 判断原始数据类型时,当其为对象会 null 时,typeof 都将返回 object 。

 用 typeof 检测函数时会返回 function 。

只要变量是给定引用类型(由原型链决定,原型链将在后面解析)的实例,则 instanceof 操作符将返回 true 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值