三個操作符
1.hasownproperty
2.in
3.instanceof
迴圈可以遍歷物件中所有可列舉的物件屬性(包括物件自有屬性和繼承的屬性)。
注意:使用for...in
迴圈遍歷物件屬性時返回的屬性,會因為各個瀏覽器不同,導致物件屬性遍歷的順序有可能不是當初構建時的順序。
示例:遍歷出obj物件的各個屬性
示例:遍歷出obj物件的各個屬性的值
obj.a 執行時隱式轉換為---> obj.['a'],輸出結果是一樣的
var prop in obj
prop為自定義的值,用於物件的屬性每次傳入。
那麼問題來了,怎麼讓原型裡的東西不輸出?
原型裡自帶的屬性和值都不會輸出的,只會輸出人為修改,人為新增的屬性值。
如果不想讓原型裡的屬性值輸出,使用hasownproperty
, 過濾掉繼承的屬性
。 一般var prop in obj
和hasownproperty
是一起使用的。
obj.hasownproperty(prop)
prop
要檢測的屬性。
用來判斷某個物件是否含有指定的屬性的 boolean(如果是自身屬性返回ture,反之則返回false)。
所有繼承了 object 的物件都會繼承到hasownproperty
方法。這個方法可以用來檢測乙個物件是否含有特定的自身屬性;和 in 運算子不同,該方法會忽略掉那些從原型鏈上繼承到的屬性。
詳情檢視
in
和hasownproperty
類似,hasownproperty
是判斷這個屬性屬不屬於這個物件,而 in 是判斷在這個物件能不能呼叫這個屬性。
一般這個操作符是極少用到的,幾乎沒用,但是部分面試會考in
和hasownproperty
的區別。
object instanceofconstructor
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時就會發生錯誤,為了避免該情況的產生,我們一般使用立即執行函式 閉包的功能進行開...