温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

typeof和instanceof间有哪些区别

发布时间:2022-03-11 11:38:03 来源:亿速云 阅读:105 作者:iii 栏目:web开发

今天小编给大家分享一下typeof和instanceof间有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

typeof和instanceof间有哪些区别

typeof

typeof是一个一元运算符,放在一个运算数前面,这个运算数可以是任何类型。它返回一个字符串,说明运算数的类型。请看栗子:

const type =  typeof '中国万岁'; // string
typeof 666; // number
typeof true; // boolean
typeof undefined; // undefined
typeof Symbol(); // symbol
typeof 1n; // bigint
typeof () => {}; // function

typeof []; // object
typeof {}; // object
typeof new String('xxx'); // object

typeof null; // object

通过以上例子可以看出,typeof只能准确判断基本数据类型和函数(函数其实是对象,并不属于另一种数据类型,但也能够使用 typeof 进行区分),无法精确判断出引用数据类型(统统返回 object)。

有一点需要注意,调用typeof null返回的是object,这是因为特殊值null被认为是一个对空对象的引用(也叫空对象指针)。

如果想准确判断引用数据类型,可以用instanceof运算符。

instanceof

instanceof运算符放在一个运算数的后面,给定对象的前面。它返回一个布尔值,说明运算数是否是给定对象的实例:

const result = [] instanceof Array; // true

const Person = function() {};
const p = new Person();
p instanceof Person; // true

const message = new String('xxx');
message instanceof String; // true

区别

  • typeof 会返回一个运算数的基本类型,instanceof 返回的是布尔值

  • instanceof 可以准确判断引用数据类型,但是不能正确判断基本数据类型

  • typeof 虽然可以判断基本数据类型(null 除外),但是无法判断引用数据类型(function 除外)

扩展

Object.prototype.toString.call()

typeofinstanceof都有一定的弊端,并不能满足所有场景的需求。如果需要通用检测数据类型,可以使用Object.prototype.toString.call()方法:

Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(666); // "[object Number]"
Object.prototype.toString.call('xxx'); // "[object String]"

注意,该方法返回的是一个格式为"[object Object]"的字符串。

封装函数

为了更方便的使用,我们可以将这个方法进行封装:

function getType(value) {
    let type = typeof value;
    if (type !== 'object') { // 如果是基本数据类型,直接返回
        return type;
    }
    // 如果是引用数据类型,再进一步判断,正则返回结果
    return Object.prototype.toString.call(value).replace(/^\[object (\S+)\]$/, '$1');
}

getType(123); // number
getType('xxx'); // string
getType(() => {}); // function
getType([]); // Array
getType({}); // Object
getType(null); // Null

以上就是“typeof和instanceof间有哪些区别”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI