JS中typeof和instanceof的区别(详细)

本文详细解析了typeof和instanceof在JavaScript中的用法和区别,包括它们的参数数量、返回值类型,以及在不同场景下的应用。通过实例展示了如何判断变量类型和对象实例,为前端开发者提供了实用的编程指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


typeof和instaceof在前端编程中使用比较频繁,这里我对他们的区分做一个整理,希望对大家有帮助。

一、参数数量的区分

1.1 typeof是一元运算符,即参数只有一个

	使用形式如下两种方式,operand是表达式(括号可选可不选)
	typeof operand
	or
	typeof (operand)

1.2 instanceof 是二元元素符

object instanceof constructor
例:
var a = [];
a instanceof Array
二、返回值的区分

2.1 typeof 的返回值是String类型,有以下6种(报错除外)

  1. string
  2. boolean
  3. number
  4. undefined
  5. object
  6. function
    在这里插入图片描述
    其中需要注意一下几点
    1.返回值均为小写,不要当成大写数据类型了
    2.typeof的优先级高于+、-、*、/,但低于括号,具体请参考js运算符的优先级,所以上文演示才会报错相当于
(typeof a) = 1;
"string" = 1;
赋值运算属于LHS,因为不能对常量字符串赋值,所以报了LHS的错误。
思考题1(答案在结尾)

这里也给大家留一个思考题,typeof 1==1,输出是什么(结尾奉上)
2.2 instanceof 的返回值是bool类型
看这里之前,建议大家先看这一篇文章原型规则——javascript学习
先上代码看看
在这里插入图片描述
看到这个运行结果,就纳闷了,为什么String instanceof String 是false,我们先看instance的实现原理(搬砖的这篇JavaScript instanceof 运算符深入剖析

function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
	 var O = R.prototype;// 取 R 的显示原型
	 L = L.__proto__;// 取 L 的隐式原型
	 while (true) { 
	   if (L === null) 
	     return false; 
	   if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 
	     return true; 
	   L = L.__proto__; 
	 } 
}

看完上篇原型规则总结一句话就是,只有当object的隐式原型等于后者的显示原型时才返回true,根据原型链一直向上寻找,直至找到为止。这里分析一下Object、Number和Function instanceof自身的情况(关于显示原型和隐式原型这里不再多做解释):

1.Object instanceof Object
右侧:Object.prototype是Object.prototype
左侧 :Object.__proto__是Function.prototype
接着向上:Function.prototype.__proto__是Object.prototype
左侧等于右侧 返回true

2.Number instanceof Number
右侧:Number.prototype是Number.prototype
左侧 :Number.__proto__是Function.prototype
接着向上:Function.prototype.__proto__是Object.prototype
左侧不等于右侧 返回false

3.Function instanceof Function
右侧:Function.prototype是Function.prototype
左侧 :Function.__proto__是Function.prototype
左侧等于右侧 返回true
思考题2(答案见尾部)

Object instanceof Function 是true还是false?

三、使用场景

3.1 typeof主要用来返回目标表达式的的数据类型
3.2 instanceof 主要用于判断一个对象是否是一个实例的原型。

四、解答

思考题1)typeof 1==1,输出是什么

//等价于
let a = typeof 1;//a="number";
a ==1;//false

思考题2)Object instanceof Function 是true还是false?

Object instanceof Function
右侧:Function.prototype是Function.prototype
左侧 :Object.__proto__是Function.prototype
左侧等于右侧 返回true

就这么多啦,如有问题,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值