一、typeof
1. 基本介绍
描述:typeof用于判断一个变量的类型,返回值主要有:“number”、 “string”、“boolean”、“object”、“function”、“undefined”、“symbol”
语法:typeof operand
operand
:要被判断类型的变量
返回值:operand的类型
2. 具体使用
console.log(typeof 1); // number
console.log(typeof '1');// string
console.log(typeof false);// boolean
console.log(typeof {});// object
console.log(typeof function () {
});// function
let a
console.log(typeof a);// undefined
let b = Symbol()
console.log(typeof b);// symbol
3. 缺点
typeof在判断基本类型的时候是非常好用的,但是在判断引用类型的时候就有些捉襟见肘了
例如:
console.log(typeof {});// object
console.log(typeof []);// object
console.log(typeof null);// object
这个时候就应该使用instanceof了
二、instanceof
1. 基本介绍
描述:instanceof用来检查A的原型链上是否存在B的原型,或者说,A是不是另一个B的实例
语法:A instanceof B
A
:要被判断类型的变量
B
:原型对象
返回值:true
or false
2. 具体使用
console.log([] instanceof Array); // true
console.log([] instanceof Object);// true
console.log({} instanceof Object);// true
console.log(null instanceof Object);//false
因为instanceof是查找整个原型链的,所以只要是存在原型链上的原型对象,都可以被查找到。
例如:
let Person = function (name) {
this.name = name
}
let Friend = function (age) {
this.age = age
}
Friend.prototype = new Person('lis') // 原型继承
let tom = new Friend(16)
console.log(tom instanceof Friend)
console.log(tom instanceof Person)
因为Person的原型在tom的原型链上,所以tom instanceof Person
为true,这也是为什么[] instanceof Object
同样为true
3. 缺点
因为instanceof用来检查A的原型链上是否存在B的原型所以通过实例化得到的对象都可以判断到它的实例对象,但是不是通过实例化得到的对象就无法判断了。
例如:
console.log(1 instanceof Number); // false
let num = new Number('1')
console.log(num instanceof Number); // true
console.log('哈哈' instanceof String); //false
let str = new String('哈哈')
console.log(str instanceof String); // true
所以对一些基本数据类型进行判断的时候,建议使用 typeof