typeof和instanceof的区别

一、背景

typeof 和 instanceof 都是 JavaScript 中用来检测数据类型的运算符,但它们的作用不同。

二、typeof

typeof 运算符是用来检测一个变量或表达式的数据类型的。它返回一个字符串,表示该值的数据类型

console.log(typeof 123);// number
console.log(typeof 'hello');//输出 string
console.log(typeof true);//输出 boolean
console.log(typeof undefined);//输出 undefined
console.log(typeof function () { });//输出 function
console.log(typeof null);//输出 object
console.log(typeof [123]);//输出 object
console.log(typeof { name: 'tom', age: 18 });//输出 object
console.log(typeof new Date());//输出 object

 基本数据类型可以用typeof检测出来,但null、数组、对象、函数的实例(new+函数),返回的都是object,无法检测到真实的数据类型,需要使用instanceof

三、instanceof

instanceof 运算符是用来判断一个对象是否属于某个类(构造函数)的实例。

instanceof 检查的是对象的原型链上是否有该类实例,只要原型链上有该类实例,就会返回true,否则为false

class Person { }
class Dog extends Person { }
let dog = new Dog()
console.log(dog instanceof Dog);//输出 true
console.log(dog instanceof Person);//输出 true
console.log(dog instanceof Object);//输出 true
//执行顺序:dog-->Person的实例-->Object实例-->Object原型
//Object是所有对象的原型,所以任何和对象和Object进行instanceof运算都会返回true
let b = { name: 'Bob', age: 18 }
console.log(b instanceof Person);//输出 false
需要注意的是,instanceof 运算符只能用来判断对象是否为该类的实例,不能用来判断基本数据类型的值。而且,如果要判断对象是否为某个类的实例,该类必须是通过构造函数定义的,不能是字面量对象或匿名函数等其他形式。

四、typeof与instanceof总结:

①typeof与instanceof用来判断变量是否为空,或者属于什么数据类型

②typeof返回的是一个字符串,用来判断是什么数据类型

③instanceof返回的是一个布尔值,用来判断一个变量是否属于对象上的实例

④typeof检测的是简单数据类型,instanceof检测的是引用数据类型

五、检查对象当中是否含有某个属性

方法一:使用 in 运算符

语法:"name" in object
使用in运算符检查属性时,无论属性在对象自身还是在原型中,都会返回true
//使用in运算符 ---> 语法:"name" in object
class Animal{
  name = 'tom'
  age = 18
}
let animal = new Animal()
console.log('name' in animal);//输出 true
console.log('gender' in animal);//输出 false,因为 animal 对象没有 gender 属性

方法二:使用hasOwn方法

语法:Object.hasOwn(对象, 属性名) 
其中,name 是属性名,animal 是要检查的对象。如果该对象具有指定的属性,则返回 true,否则返回 false
//使用hasOwn方法 ---> 语法:Object.hasOwn(对象, 属性名) 
class Animal{
  name = 'tom'
  age = 18
}
let animal = new Animal()
console.log(Object.hasOwn(animal,'name'));//输出 true

最后:👏👏😊😊😊👍👍 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值