Javascript中的in,hasOwnProperty,delete,for/in

ndblog發表於2015-07-16

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
}

作者:Tyler Ning

出處:http://www.cnblogs.com/tylerdonet/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,如有問題,可以通過以下郵箱地址williamningdong@gmail.com
 聯絡我,非常感謝。


相關文章