物件的列舉

2021-08-19 08:45:52 字數 1673 閱讀 8460

三個操作符

1.hasownproperty

2.in

3.instanceof

迴圈可以遍歷物件中所有可列舉的物件屬性(包括物件自有屬性和繼承的屬性)。

注意:使用for...in迴圈遍歷物件屬性時返回的屬性,會因為各個瀏覽器不同,導致物件屬性遍歷的順序有可能不是當初構建時的順序。

示例:遍歷出obj物件的各個屬性

示例:遍歷出obj物件的各個屬性的值

obj.a     執行時隱式轉換為--->  obj.['a'],輸出結果是一樣的

var prop in obj

prop為自定義的值,用於物件的屬性每次傳入。

那麼問題來了,怎麼讓原型裡的東西不輸出?

原型裡自帶的屬性和值都不會輸出的,只會輸出人為修改,人為新增的屬性值。

如果不想讓原型裡的屬性值輸出,使用hasownproperty

, 過濾掉繼承的屬性

。 一般var prop in objhasownproperty是一起使用的。

obj.hasownproperty(prop)

prop要檢測的屬性。

用來判斷某個物件是否含有指定的屬性的 boolean(如果是自身屬性返回ture,反之則返回false)。

所有繼承了 object 的物件都會繼承到hasownproperty方法。這個方法可以用來檢測乙個物件是否含有特定的自身屬性;和 in 運算子不同,該方法會忽略掉那些從原型鏈上繼承到的屬性。

詳情檢視

inhasownproperty類似,hasownproperty是判斷這個屬性屬不屬於這個物件,而 in 是判斷在這個物件能不能呼叫這個屬性。

一般這個操作符是極少用到的,幾乎沒用,但是部分面試會考inhasownproperty的區別。

object instanceof 

constructor

object要檢測的物件

constructor某個建構函式。

instanceof運算子用來檢測constructor.prototype是否存在於引數object的原型鏈上。

例如:

function obj () 

var obj = new obj();

console.log(obj instanceof obj);

會在控制台輸出 true。

因為 obj.prototype 存在於 obj.__proto__ 上面

列舉物件中的屬性

迴圈將遍歷物件本身的所有可列舉屬性,以及物件從其建構函式原型中繼承的屬性 更接近原型鏈中物件的屬性覆蓋原型屬性 語法 for var 變數 in 物件 物件中有幾個屬性 包括繼承自其建構函式的原型的可列舉的屬性 迴圈體就會有執行幾次。var obj for var n in obj 輸出 hello...

繼承模式,物件空間,物件列舉

繼承的發展史 傳統形式 原型鏈 過多的繼承了沒用的屬性 借用建構函式 不能繼承借用建構函式的原型 每次建構函式都要多走一乙個函式 通過call來改變this的指向 function person age,name,function student age,name,grade var student...

命名空間 物件列舉

在實際專案開發中,往往乙個頁面由多人共同開發,這個時候就存在乙個問題,一旦命名的變數相同,將會導致衝突,如下 張三定義的內容 var num 123 李四定義的內容 var num 我是乙個字串 這個張三在後面呼叫num時就會發生錯誤,為了避免該情況的產生,我們一般使用立即執行函式 閉包的功能進行開...