3.4 in运算符
问题一:in运算符
in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。
如果右侧的对象拥有一个名为左操作数值的属性名,那么表达式返回true
问题一:in运算符具体用法
1、如果第二个运算数为对象,则in运算符用来检测第一个运算数是否是第二个运算数的属性名。是,返回true,否则返回false。
例:
var obj = {x:1,y:2};
“x” in obj // 返回true
“y” in obj // 返回true
“1” in obj // 返回false
2、如果第二个运算数为数组,则in运算符用来检测第一个运算数是否为数组包含的索引之一。
例:
var arr = [12,45,78];
12 in arr // 返回false
45 in arr // 返回false
78 in arr // 返回false
0 in arr // 返回true
2 in arr // 返回true
3.5 instanceof运算符
问题一:instanceo运算符
instanceof运算符希望他的左操作数是一个对象,右操作数是标识对象的类,如果左侧的对象是右侧类的实例,侧返回true,不是返回false。
var da = new Data() // 初始化一个对象
da instanceof Data; // true:da是Data类创建的
da instanceof Number; // false:da不是一个Number对象
da instanceof Object; // true:因为所有的类都是继承自Object
var a = new Data() // 创建一个数组
a instanceof Array; // true:a是一个数组
a instanceof Object; // ftrue:因为所有的数组都是Object
a instanceof RegExp; // false:数组不是正则表达式
问题二:instanceof工作原理
首先了解“原型链”(prototype)。原型链作为JavaScript的继承机制。
为了计算表达式o instanceof f,JavaScript首先计算f.prototype,然后在原型链中查找o,如果找到,那么o是f(或者f的父类)的一个实例,表达式返回true。如果f.prototype不在o的原型链中的话,那么o就不是f的实例,instanceof 返回false
网友评论