javascript-typeof和instanceof区别

javascript-typeof和instanceof区别

typeof

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串)
typeof其实就是判断参数是什么类型的实例,就一个参数

typeof 一般只能返回如下几个结果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

var num = 1;
console.log(typeof num);//number
console.log(typeof NaN);//number
var flag = true;
console.log(typeof flag);//boolean
var isNull = null;
console.log(typeof isNull);//object
var name = "ChanSamKwan";
console.log(typeof name);//string
var variable;
console.log(typeof variable)//undefined
var arr = [1,2,3];
console.log(typeof arr);//object
var obj = {name:"yoyo"};
console.log(typeof obj)//object
function showName(name){
    console.log(name)
}
console.log(typeof showName)//function

可以看到在使用 typeof 运算符时运算引用类型时,无论引用的是什么类型的对象,它都返回 “object”,(注意typeof null也是返回字符串object,函数返回 function字符串)
这就需要用到instanceof来检测某个对象是不是另一个对象的实例。instanceof运算符测试构造函数的prototype属性是否出现在对象的原型链中的任何位置

 instanceof

// 定义构造函数
function C(){} 
function D(){} 
var o = new C();
o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype
o instanceof D; // false,因为 D.prototype 不在 o 的原型链上
o instanceof Object; // true,因为 Object.prototype.isPrototypeOf(o)返回true
C.prototype instanceof Object // true,同上
C.prototype = {};
var o2 = new C();
o2 instanceof C; // true
o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.
D.prototype = new C(); // 继承
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true 因为 C.prototype现在在o3的原型链上
原文地址:https://www.cnblogs.com/kootimloe/p/13332308.html