《JS权威指南学习总结--4.9.3in和instanceof运算符》
内容要点:
一.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判断一个对象是否是一个类的实例的时候,这个判断也会包含对"父类" 检测。
如果右操作数不是函数,则抛出一个类型错误异常。