typeof和valueof、instance of 之间的区别

1、typeof

// typeof 返回的是类型的字符串值
typeof undefined === 'undefined' // true
typeof true === 'boolean' // true
typeof 42 === 'number' // true
typeof "42" === "string" // true
typeof { life : 42 } === "object" // true

// 特殊的类型
typeof null === "object" // true
// 需要用复合条件去检测null
var a = null;
(!a && typeof a === "object"); // true
typeof function a(){/** */} === "function"; // true
 

2、valueOf()函数用于返回指定对象的原始值。

该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。

所有主流浏览器均支持该函数。

var array = ["CodePlayer", true, 12, -5];
document.writeln( array.valueOf() === array ); // true

3、instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

var a=new Array();

alert(a instanceof Array); // true
另外,更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

例如:

function Foo(){} 
Foo.prototype = new Aoo();//JavaScript 原型继承 
var foo = new Foo(); 
console.log(foo instanceof Foo)//true 
console.log(foo instanceof Aoo)//true

上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。


又如:

console.log(Object instanceof Object);//true 
console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false 
console.log(String instanceof String);//false  
console.log(Function instanceof Object);//true  
console.log(Foo instanceof Function);//true 
console.log(Foo instanceof Foo);//false
原文地址:https://www.cnblogs.com/Roxxane/p/13805696.html