JavaScript中判断数据类型的方法
JavaScript中判断数据类型的方法
1.instanceof操作符
instanceof是一个二元操作符,其左侧的操作数是一个对象,右侧的操作数是一个(构造)函数。如果左侧的对象是右侧构造函数的实例,instanceof操作符将返回true。事实上,只要构造函数的原型对象位于该对象的原型链上,instanceof操作符就会返回true。如果用 instanceof 检测原始值,则始终会返回 false,因为原始值不是对象。
1 const obj = {a : 1}; 2 const func = function () { 3 console.log("Hello"); 4 } 5 6 console.log(obj instanceof Object); // true 7 console.log(func instanceof Object); // true 8 console.log("Hello" instanceof String); // false 9 console.log(new String("Hello") instanceof String); // true
2.typeof操作符
typeof操作符用于检测任意变量的数据类型。typeof操作符对null返回object属于历史遗留的bug,我们可以将null视为对空对象的引用。typeof操作符对除null之外的所有基本数据类型的变量都将返回对应的类型,而对除函数以外的所有对象将返回object,对函数将返回function。
1 console.log(typeof 1); // number 2 console.log(typeof "Hello"); // string 3 console.log(typeof null); // object 4 console.log(typeof {a : 1}); // object 5 console.log(typeof function () { 6 console.log("Hello"); 7 } ); // function 8 console.log(typeof Symbol()); // symbol 9 console.log(typeof undefined); // undefined 10 console.log(typeof true); // boolean
3.constructor
在通过new操作符调用构造函数创建一个新对象时,这个新对象的[[Prototype]]会被设置为构造函数的prototype属性的值,这个值即为构造函数的原型对象的引用。通过new操作符创建的新对象可以通过其[[Prototype]]的constructor属性访问其构造函数。通过构造函数,我们可以获得关于某个对象的类型信息,但如果手动更改了对象的[[Prototype]],则我们得到的构造函数信息也会发生改变。
1 const Person = function (name, age) { 2 this.name = name; 3 this.age = age; 4 } 5 6 const person = new Person("Alex", 18); 7 console.log(person.__proto__ === Person.prototype); // true 8 console.log(person.__proto__.constructor); // [Function: Person] 9 10 const Person2 = function (name, age) { 11 this.name = name; 12 this.age = age; 13 } 14 15 person.__proto__ = Person2.prototype; 16 console.log(person.constructor); // [Function: Person2]
4.调用Object.prototype.toString方法
Object.prototype.toString方法为Object的原型方法,该方法返回当前对象的[[Class]],我们可以通过这个方法获得任意变量的类型信息。
1 console.log(Object.prototype.toString({a:1})); //[object Object] 2 console.log(Object.prototype.toString.call(1)); // [object Number] 3 console.log(Object.prototype.toString.call("Hello")); // [object String] 4 console.log(Object.prototype.toString.call(Symbol())); // [object Symbol] 5 console.log(Object.prototype.toString.call(null)); // [object Null] 6 console.log(Object.prototype.toString.call(undefined)); // [object Undefined] 7 console.log(Object.prototype.toString.call([1,2,3])); // [object Array] 8 console.log(Object.prototype.toString.call(true)); // [object Boolean] 9 console.log(Object.prototype.toString.call(function () {})); // [object Function] 10 console.log(Object.prototype.toString.call(new RegExp())); // [object RegExp] 11 console.log(Object.prototype.toString.call(new Date())); // [object Date] 12 console.log(Object.prototype.toString.call(new Error())); // [object Error] 13 console.log(Object.prototype.toString.call(global)); // [object global]

浙公网安备 33010602011771号