《JS权威指南学习总结--4.9.3in和instanceof运算符》

时间:2021-02-21 12:41:13

内容要点:

一.in运算符

in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数数值的属性名,那么表达式返回true。

例如:

var point=["x":1,"y":2];

var a="x" in point; //true:对象里有一个名为"x"的属性

var b=z in point;     //false:对象里不存在名为"z"的属性

"toString" in point  //true:对象继承了toString()方法

var data=[7,8,9];

"0" in data //true:数组包含元素"0"

1 in data //true:数组转换为字符串

3 in data  //false:没有索引为3的元素

二.instanceof运算符

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false。

例如:

var d=new Date();     //通过Date()构造函数来创建一个新对象。

d instanceof Date;      //计算结果为true,d是由Date()创建的

d instanceof Object;    //计算结果为true,所有的对象都是Object的实例。

d instanceof Number;  //计算结果为false,d不是一个Number对象

var a=[1,2,3];       //通过数组直接量的写法创建一个数组。

a instanceof Array; //计算结果为true,a是一个数组。

a instanceof Object; //计算结果为true,所有的数组都是对象。

a instanceof RegExp ; //计算结果为false,数组不是正则表达式。

需要注意的是:所有的对象都是Object的实例。当通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对"父类" 检测。

如果右操作数不是函数,则抛出一个类型错误异常。