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
}