typeof和instance of的用法区别,instanceof比较的是什么
Type和instanceof运算符都可以用来确定数据类型,那么它们之间有什么区别呢?下面这篇文章将带你了解typeof和instanceof,并谈谈它们的区别。希望对你有帮助!
Type和instanceof运算符是用来判断数据类型的,但是它们的使用场景不同,有些细节需要特别注意。接下来我们就来了解一下,彻底掌握知识,再也不怕面试官提问了。
typeof
typeof是一元运算符,放在操作数之前,操作数可以是任何类型。它返回描述操作数类型的字符串。请看栗子:
Const type=typeof中国万岁’;//字符串
666的类型;//数字
typeof true//布尔型
未定义的类型;//未定义
typeof符号();//符号
1n的类型;//bigint
type of()={ };//函数
[]的类型;//对象
{}的类型;//对象
新字符串的类型(“XXX”);//对象
类型为null//object从上面的例子可以看出,typeof只能准确判断基本的数据类型和函数(函数其实是对象,不属于另一种数据类型,但也可以用typeof来区分),而不能准确判断引用的数据类型(全部返回object)。
需要注意的是,调用typeof null会返回object,因为特殊值null被认为是对空对象(也称为空对象指针)的引用。
如果要准确判断引用数据类型,可以使用instanceof运算符。
instanceof
instanceof运算符位于操作数之后和给定对象之前。它返回一个布尔值,指示操作数是否是给定对象的实例:
const result=[]数组的实例;//真
const Person=function(){ };
const p=new Person();
人的p实例;//真
const message=新字符串( XXX );
字符串的消息实例;//true
区别
typeof将返回一个操作数的基本类型,instanceof将返回一个布尔值。
instanceof可以准确判断引用数据类型,但不能正确判断基本数据类型。
Type可以确定基本数据类型(null除外),但不能确定引用数据类型(function除外)。
扩展
Object.prototype.toString.call()
type of和instanceof都有一定的弊端,不能满足所有场景的需求。如果需要检测一般的数据类型,可以使用Object.prototype.toString.call()方法:
object . prototype . tostring . call({ });//[对象对象]
object . prototype . tostring . call([]);//[对象数组]
object . prototype . tostring . call(666);//[对象号]
object . prototype . tostring . call( XXX );//[object String]请注意,此方法返回格式为“[object Object]”的字符串。
封装函数
为了使用更方便,我们可以封装这个方法:
函数getType(值){
设type=typeof value
如果(类型!==object) {//如果是基本数据类型,直接返回
返回类型;
}
//如果是引用数据类型,进一步判断,定期返回结果。
返回Object.prototype.toString.call(值)。replace(/^\[object (\S )\]$/, $ 1 );
}
getType(123);//数字
getType( XXX );//字符串
getType(()={ });//函数
getType([]);//数组
getType({ });//对象
getType(null);//Null【相关推荐:javascript视频教程,web前端】以上是关于typeof和instanceof区别的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。