in操做符用来判断某个属性属于某个对象,能够是对象的直接属性,也能够是经过prototype继承的属性。(参见hasOwnProperty)数组
n 对于通常的对象属性须要用字符串指定属性的名称prototype
如:
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar // returns true
"model" in mycar // returns true
n 对于数组属性须要指定数字形式的索引值来表示数组的属性名称(固有属性除外,如length)。对象
// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees // returns true
3 in trees // returns true
6 in trees // returns false
"bay" in trees // returns false (you must specify the index number,
// not the value at that index)
"length" in trees // returns true (length is an Array property)
n in的右边必须是一个对象,如:你能够指定一个用String构造器生成的,可是不能指定字符串直接量的形式:继承
var color1 = new String("green");
"length" in color1 // returns true
var color2 = "coral";
"length" in color2 // generates an error (color is not a String object)
n 若是你使用delete操做符删除了一个属性,再次用in检查时,会返回false,如:索引
var mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar; // returns false
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // returns false
n 若是你把一个属性值设为undefined,可是没有使用delete操做符,使用in检查,会返回true.ip
var mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar; // returns true
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
trees[3] = undefined;
3 in trees; // returns true