zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

66.typeof和instance of 检测数据类型有什么区别? #105

Open roxy0724 opened 5 years ago

zlx362211854 commented 5 years ago

function Foo(){} var foo = new Foo(); console.log(foo instanceof Foo)//true



* Function 不能通过上述方法准确判断,因为
 `console.log(function a() {} instanceof Function) // true`
`console.log(function a() {} instanceof Object) // true`
都为true,因为在对象创建的时候,new Object() 返回一个对象{},这个对象其实是Object()函数的返回值,所以在js中,函数是一等公民,对象是函数的实例,所以`console.log(Object instanceof Function) // true`
* 所以Function可以这么判断:`Object.prototype.toString.call(function(){}) // [object Function]`
goldEli commented 5 years ago

typeof

概念: 检测变量类型,比如,number、bealoon、string、function 等。能检测的类型不多。

typeof 1 === 'number'

instanceOf

概念: 检测变量是否存在与该构造函数相同的原型

var a = {}
a instanceOf Object

// 等效于
a.__proto__ === Object.prototype

Object.prototype.string()

概念: 会返回内置对象的 [[Class]] 属性,[[Class]] 内部属性的值用于内部区分对象的种类,所以可以检测出所有的类型

Object.prototype.toString.call(function(){}) === "[object Function]"

Reference

【JS】类型检测

nanslee commented 5 years ago