,转JavaScript: in, hasOwnProperty, delete, for/in

in 运算符

判断对象是否拥有某一属性

只要对象拥有该属性,就会返回true,否则false

var point = { x:1, y:1 };

alert( 'x' in point ); //true

var arr = ['one', 'two'];

alert( 'kang' in arr ); //false

alert( '1' in arr ); //true

alert( 'push' in arr ); //true

var fn = function(){};

fn.prototype.site = 'cnblogs.com';

var obj = new fn();

alert( 'site' in obj ); //true

hasOwnProperty

判断对象是否具有某一属性。这个属性必须是自己具有的,即非继承的。

var o = {};

o.name = 'object';

alert( o.hasOwnProperty('kang') ); //false: 不存在

alert( o.hasOwnProperty('toString') ); //false: 'toString'方法继承自'Object'

alert( o.hasOwnProperty('name') ); //true

alert( Math.hasOwnProperty("kang") ); //false

alert( Math.hasOwnProperty("cos") ); //true;

alert( Math.hasOwnProperty("toString") ); //false: 'toString'方法继承自'Object'

var base = function(){

this.name = 'Rain Man';

};

base.prototype.site = 'cnblogs.com';

var o = new base();

alert( o.hasOwnProperty('site') ); //false: 是继承的

alert( o.hasOwnProperty('name') ); //true

delete 运算符

删除对象的属性,删除后不能使用 for/in 枚举出删除的属性。

删除数组的元素,删除后数组的 length 不会改变,不可以使用 for/in 枚举出来删除的元素; shift()、pop()、splice()才会真正的删除数组中的元素

var point = { x:1, y:1 };

delete point.x; //{ y:1 }

var arr = ['one', 'two'];

delete arr[0]; //[undefined, 'two']

for/in

枚举对象的属性

对象的一些属性是不可以使用for/in来输出的,例如:内部的,用户自定义的可以,从构造函数prototype中继承的也可以枚举出

var arr = ['one', 'two'];

arr.author = 'rainman';

//不会枚举出数组的push,pop等方法,因为这些方法都是内部的

for( var i in arr ) ist(arr[i]); //'one'、'two'、'rainman'

var Blog = function(){};

Blog.prototype.site = 'cnblogs.com';

var oBlog = new Blog();

for( var i in oBlog ) ist(oBlog[i]); //'cnblogs.com'

var RM = function(){};

RM.prototype = new Blog();

RM.prototype.url = 'http://rainman.cnblogs.com'

var oRM = new RM();

for( var i in oRM ){

ist(i + ':'+ oRM[i]); //'url:http://rainman.cnblogs.com'、site:cnblogs.com

}