#总结#typeof和instaceof

基础知识:
js六种数据类型:string,number,boolean,object,null,undefined
JS的第七种基本类型Symbols

区别:
1、typeof 是一个一元运算。返回值是一个字符串,只能返回如下几个结果:string,number,boolean,function,object,undefined。
数组、null、对象都返回object

#总结#typeof和instaceof_第1张图片
Paste_Image.png
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
typeof Number(1) === 'number'; // 但不要使用这种形式!
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!

typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

typeof function(){} === 'function';
typeof Math.sin === 'function';

2、instaceof运算符
object instanceof constructor
用来检测 constructor.prototype
是否存在于参数 object
的原型链上。它是一个二元运算符号,用于判断一个变量是否为某个对象的实例。

var a=new Array();
alert(a instanceof Array); // true
alert(a instanceof Object) // true。因为 Array 是 object 的子类。
function test(){};
var a=new test();
alert(a instanceof test) //true
// instanceof 测试的 object 是指 js 语法中的 object,不是指 dom 模型对象。使用 typeof 会有些区别
var a=new Array();
alert(a instanceof Object);//true
alert (window instanceof Object);//true
alert(typeof(window));//object

function C(){}
function D(){}
var o = new C();
o instanceof C;//true
o instanceof D;//false
o instanceof Object;//true

C.prototype = {};
var o2 = new C();
o instanceof C;//false。因为C.prototype指向了一个空对象,这个空对象不在o的原型链上.
o2 instanceof C;//true

-注!

  • 如果表达式 obj instanceof Foo返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false。
  • 原表达式的值也会改变,就是改变对象obj的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的proto魔法属性,是可以实现的。比如执行obj.proto = {}之后,obj instanceof Foo就会返回false了。

参考:
instanceof
typeof

你可能感兴趣的:(#总结#typeof和instaceof)