屬性的遍歷,刪除,檢測

2021-08-03 19:10:01 字數 2785 閱讀 6965

先定義三種不同型別的屬性(方法也可當作屬性來看待)

//宣告類和類的建構函式

function person(name,age)

this.setname=function(name)

this.setage=function(age)

} var person = new person('xiao', 21);

//類的靜態屬性方法

person.max_age=120; //類的靜態屬性

person.cry=function()

//類的prototype屬性方法

function chinese()

} chinese.prototype=new person('xiaomin');

var xiaomin = new chinese();

1. 遍歷屬性

for(var p in xiaomin)

返回所有屬性名

document.writeln(object.keys(person)); //=>name,age,sayhello,setname

返回所有自有屬性名

document.writeln(object.getownpropertynames(xiaomin)); //=>sayhello

2. 刪除屬性

document.writeln(person.age); //=> 21

document.writeln(delete person.age); //=> true

document.writeln(person.age); //=> undefined

document.writeln(delete person.weight); //=> true

document.writeln(delete person.sayhello); //=> true

if(person.sayhello)else

document.writeln(delete person.max_age); //=> true

document.writeln(person.max_age); //=>undefined 靜態屬性可被刪除

document.writeln(delete person.cry); //=> true

//丟擲異常, 靜態方法可被刪除

document.writeln('**********==='); //=> true

document.writeln(chinese.prototype.name); //=> xiao

document.writeln(delete chinese.prototype.name); //=> true

document.writeln(chinese.prototype.name); //=> undefined, prototype中的屬性被刪除

document.writeln(delete chinese.prototype); //=> false, prototype不能被刪除

document.writeln(delete xiaomin.sayhello); //=> true

//丟擲異常, 繼承的方法可被刪除

3. 檢測屬性

//js物件可看作屬性的集合,我們經常會檢測集合中成員的所屬關係--判斷某個屬性是否存在於某個物件中。

xiaomin.weight=100;

//用in判斷屬性/方法是否在物件中

document.writeln('weight' in xiaomin); //=> true, xiaomin的自有屬性/方法可被in檢測

document.writeln('setage' in xiaomin); //=> true, xiaomin的繼承屬性/方法可被in檢測

//用hasownproperty判斷屬性/方法是否是物件自有的(非繼承的)

document.writeln(xiaomin.hasownproperty('weight')); //=> true, weight是xiaomin的自有屬性/方法

document.writeln(xiaomin.hasownproperty('setage')); //=> false, setage不是xiaomin的自有屬性/方法

//propertyisenumerable是hasownproperty的增強版,只有檢測到是自有屬性且這個屬性的可列舉(可遍歷)性為true時才返回true

document.writeln(xiaomin.propertyisenumerable('weight')); //=> true

document.writeln(xiaomin.propertyisenumerable('setage')); //=> false 非自有屬性

document.writeln(xiaomin.propertyisenumerable('tostring')); //=> false 非可列舉屬性

//用"!=="判斷乙個屬性是否undefined

document.writeln(xiaomin.weight !== undefined); //=> true

document.writeln(xiaomin.setage !== undefined); //=> true

//注意,上例中使用的是"!=="而不是"!=", "!=="可區分undefined和null.

屬性的遍歷

es6一共有5種方法可以遍歷物件的屬性 1 for in for in迴圈遍歷物件自身的和繼承的可列舉屬性 不含symbol屬性 2 object.keys obj object.keys返回乙個陣列,包括物件自身的 不含繼承的 所有可列舉屬性 不含symbol屬性 的鍵名。3 object.get...

屬性名的遍歷

symbol作為屬性名,不會出現在for in,for of迴圈中,也不會被object.keys object.getownpropertynames json.stringify 返回,但是它也不是私有屬性,有乙個object.getownpropertysymbols方法,可以獲取指定物件的所...

js中的屬性檢測

js中的屬性檢測,主要就是檢測乙個屬性是否屬於某個物件。常用的方式主要有3種 in hasownproperty propertyisenumerable in運算子 in運算子的左側為屬性名稱,右側為物件。var obj console.log name in obj true console.l...