详解JavaScript类型判断的四种方法
JavaScript 是一种弱类型语言,在使用时需要对数据的类型进行判断和转换。本文将介绍常见的 JavaScript 类型判断方法,包括:
- typeof
- instanceof
- Object.prototype.toString.call()
- constructor
1. typeof
typeof 是 JavaScript 内置的操作符,用于判断一个变量的类型。它可以返回以下字符串中的一个:undefined, boolean, number, string, object, function。
示例:
var a;
console.log(typeof a); // "undefined"
var b = "hello";
console.log(typeof b); // "string"
var c = 123;
console.log(typeof c); // "number"
var d = true;
console.log(typeof d); // "boolean"
var e = { foo: 'bar' };
console.log(typeof e); // "object"
var f = function() {};
console.log(typeof f); // "function"
需要注意的是,typeof null 返回 "object",这是一个旧有的 Bug。
2. instanceof
instanceof 可以用于判断对象的原型链上是否存在一个构造函数。它接受两个参数,一个是对象实例,一个是构造函数。若对象实例在其原型链上能找到这个构造函数,则返回 true,否则返回 false。
示例:
function Person() {
}
var person = new Person();
console.log(person instanceof Person); // true
console.log(person instanceof Object); // true
var str = "hello";
console.log(str instanceof String); // false
var num = 123;
console.log(num instanceof Number); // false
var bool = true;
console.log(bool instanceof Boolean); // false
var obj = {};
console.log(obj instanceof Object); // true
var arr = [];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
var date = new Date();
console.log(date instanceof Date); // true
console.log(date instanceof Object); // true
console.log(date instanceof Number); // false
需要注意的是,instanceof 只能用于判断对象,而不能用于判断基本类型。
3. Object.prototype.toString.call()
Object.prototype.toString() 方法返回一个表示当前对象类型的字符串。这个方法可以用来判断一个对象的类型,也可以用来判断基本类型的值类型。
示例:
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call(true)); // "[object Boolean]"
console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call("hello")); // "[object String]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call(new Date)); // "[object Date]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
需要注意的是,这种方法也可以用来识别出它所在上下文环境的类型,例如:
console.log(Object.prototype.toString.call(arguments)); // "[object Arguments]"
console.log(Object.prototype.toString.call(document.getElementsByTagName("body"))); // "[object HTMLCollection]"
console.log(Object.prototype.toString.call(document.createElement("div"))); // "[object HTMLDivElement]"
4. constructor
constructor 是 JavaScript 对象的一个属性,指向创建该对象的函数。使用 constructor 属性进行类型判断需要注意原型链。
示例:
function Person() {}
var person = new Person();
console.log(person.constructor === Person); // true
var str = "hello";
console.log(str.constructor === String); // true
var num = 123;
console.log(num.constructor === Number); // true
var bool = true;
console.log(bool.constructor === Boolean); // true
var obj = {};
console.log(obj.constructor === Object); // true
var arr = [];
console.log(arr.constructor === Array); // true
var date = new Date();
console.log(date.constructor === Date); // true
需要注意的是,在继承中,如果一个对象的原型链上存在多个构造函数,那么使用 constructor 判断类型时,将会得到第一个构造函数。
function Animal() {}
function Dog() {}
Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;
var dog = new Dog();
console.log(dog.constructor); // Animal
以上就是四种常见的 JavaScript 类型判断方法。在实际开发过程中,需要根据情景选用合适的判断方法,进行类型校验和转换。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JavaScript类型判断的四种方法 - Python技术站