typeof和instanceof

Posted by zhangyingji on September 10, 2018

typeof

用于判断变量的数据类型

typeof返回的值有:object、undefined、boolean、string、number、function、symbol

无法具体识别数组和其他对象

使用场景

// 判断一个变量是否存在,避免a不存在时报错
if(typeof a != "undefined") {
    alert("YES");
}

Examples

// object
typeof new Number(1)
typeof null
typeof {a:1}
// use Array.isArray
typeof [1,2,3]

// undefined
typeof undefined
typeof bafkbfkjwhkaskjfhjhkhfaksbfabsfbns

// boolean
typeof true
typeof Boolean(true)

// string
typeof ""

// number
typeof NaN
typeof Infinity

// function
typeof function(){}
typeof class C{}
typeof Math.sin

// symbols
typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'

instanceof

用于判断变量是否为对象的实例

使用场景

// 判断foo是否为Foo类的实例
function Foo(){} 
var foo = new Foo(); 
// true
console.log(foo instanceof Foo);

// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
function Aoo(){} 
function Foo(){} 
// 原型继承
Foo.prototype = new Aoo();
 
var foo = new Foo(); 
// true 
console.log(foo instanceof Foo)
console.log(foo instanceof Aoo)

Example

// true
Object instanceof Object
Function instanceof Function