JavaScript中数据类型的判断——typeof,instanceof,constructor,Object.prototype.toString.call()
程序员文章站
2022-07-08 16:52:58
...
(1)typeof
typeof 对于原始类型来说,除了 null 都可以显示正确的类型
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof 'str'); // string
console.log(typeof []); // object []数组的数据类型在typeof中被解释为object
console.log(typeof function(){}); // function
console.log(typeof {}); // object
console.log(typeof undefined); // undefined
console.log(typeof null); // object null 的数据类型被 typeof 解释为 object
typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型,所以想判断一个对象的正确类型,这时候可以考虑使用 instanceof
(2)instanceof
instanceof 可以正确的判断对象的类型,因内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。
console.log(2 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
// console.log(undefined instanceof Undefined); 报错
// console.log(null instanceof Null); 报错
可以看出直接的字面量值判断数据类型,instanceof可以精准判断引用数据类型(Array,Function,Object),而基本数据类型不能被instanceof精准判断。
我们来看一下 instanceof 在MDN中的解释:instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。其意思就是判断对象是否是某一数据类型(如Array)的实例,请重点关注一下是判断一个对象是否是数据类型的实例。在这里字面量值 2, true ,'str’不是实例,所以判断值为false。
(3)constructor
console.log((2).constructor === Number); // true
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object); // true
//这里有一个坑,如果我创建一个对象,更改它的原型,constructor就会变得不可靠了
function Fn(){};
Fn.prototype=new Array();
var f=new Fn();
console.log(f.constructor===Fn); // false
console.log(f.constructor===Array); // true
(4)Object.prototype.toString.call()
Object.prototype.toString.call(arr) 使用toString() 结合call 改变 toString 的 this 指向,进而检测 arr 的内部属性,并转化为字符串 与 [object Array] 比较
推荐阅读
-
基于javascript中的typeof和类型判断(详解)
-
typeof、instanceof、constructor 的联系、区别、应用场景(js 类型判断)
-
JavaScript中数据类型的判断——typeof,instanceof,constructor,Object.prototype.toString.call()
-
JS中的数据类型的判断(typeof,instanceof,constructor)
-
JS中数据类型的判断( typeof,instanceof,constructor,Object.prototype.toString.call() )
-
如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较
-
JavaScript中的数据类型以及typeof 和 instanceof
-
Javascript 中数据类型判断 typeof、 instanceof
-
JavaScript中判断数据类型的方法总结
-
javascript中的typeof和类型判断详解