接下来我将详细讲解在JavaScript中检测数据类型的几种方式小结。
检测数据类型的几种方式
typeof
typeof
操作符可以返回值的数据类型字符串。它只有一些简单的规则,可以处理大多数数据类型,但也存在一些特殊情况。如下所示:
typeof 123; // "number"
typeof "123"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object"
typeof {}; // "object"
typeof []; // "object"
typeof function() {}; // "function"
var fn = function() {}; // "typeof" 返回字符串是 "function"
typeof fn; // "function"
typeof NaN; // "number"
typeof Infinity; // "number"
Object.prototype.toString.call()
Object.prototype.toString.call()
方法用于精确地检测对象数据类型。它将返回一个以 [object 类型]
格式表示的字符串。如下所示:
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call("123"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function () {}); // "[object Function]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(/test/gi); // "[object RegExp]"
instanceof
instanceof
运算符可以检测一个对象是否是另外一个对象的实例。如下所示:
123 instanceof Number; // false
"123" instanceof String; // false
true instanceof Boolean; // false
undefined instanceof Object; // false
({}) instanceof Object; // true
[] instanceof Array; // true
function() {} instanceof Function; // true
注意:123
、"123"
、true
和 undefined
不是对象,不能作为 instanceof
运算符的左操作数。如果使用它们,将会抛出一个 ReferenceError
异常。
总结
在以上的三种方式中, typeof
在检测大多数类型时起到了良好的作用,但是在检测 null
或 Array
时会出现问题。而 Object.prototype.toString.call()
是最为常用的方式,它可以精确地检测所有类型。 instanceof
运算符则主要用于检测一个对象是否是某个类的实例。
示例
function getType(value) {
return Object.prototype.toString.call(value).slice(8, -1);
}
getType(123); // "Number"
getType("123"); // "String"
getType(true); // "Boolean"
getType(undefined); // "Undefined"
getType(null); // "Null"
getType({}); // "Object"
getType([]); // "Array"
getType(function() {}); // "Function"
function isClass(obj, cls) {
while (obj && obj.__proto__) {
if (obj.__proto__ === cls.prototype) {
return true;
}
obj = obj.__proto__;
}
return false;
}
isClass(new Number(123), Number); // true
isClass(new String("123"), String); // true
isClass(new Boolean(true), Boolean); // true
isClass(new Object(), Object); // true
isClass([], Array); // true
isClass({}, Object); // true
isClass(function() {}, Function); // true
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在javaScript中检测数据类型的几种方式小结 - Python技术站