in运算符:
in运算符左侧是属性名,右侧是对象.如果对象的自有属性或
继承属性中包含这个属性值则返回true;
var o = {x: 1}; 'x' in o; // true; 'y' in o; // false 'tostring' in o; // true o 继承tostring属性
in运算符可以区分不存在的deep属性和存在但值为underinrd的属性;
var o = { x: undefined}; // 属性被显式赋值为undefined o.x !== undefined; // false: 属性存在,但值为undefined; o.y !== undefined; // false: 属性不存在; 'x' in o; // true: 属性存在; 'y' in o; // false: 属性不存在; delete o.x; // 删除了属性x 'x' in o; // false: 属性不存在;
hasOwnProperty();
检测给定的名字是不是对象的自有属性,无法判断继承属性;
var o = {x: 1}; o.hasOwnProperty('x'); // true; o.hasOwnProperty('y'); // false; o.hasOwnProperty('toString'); // false;
propertyIsEnumerable();
检测传入的值是自有属性并且是可枚举时才会返回true;内置属性不可枚举;
var o = inherit({ y: 2}); o.x = 1; o.propertyIsEnumerable('x'); // true,x可枚举; o.propertyIsEnumerable('y'); // false, y是继承来的 Object.prototype.propertyIsEnumerable('toString'); // false, 不可枚举;
!==
判断一个属性是不是underfined;
'!==' 可以区分underfined 和 null; '!=' 则不可以;
var o = {x:1}; o.x !== undefined; // true, o中有属性x o.y !== undefined; // false,o中没有属性y, o.toString !== undefined; // true, o继承了toString属性;