可以說我想檢查某個屬性是否存在於Object中。我一直在尋找方法有兩種:obj.hasOwnProperty(key)vs直接使用obj引用[key]
如果(object.hasOwnProperty(鍵)){/ *做* /}
OR
如果(對象[關鍵]) {/ *做* /}
假設,我們永遠不會有object = { key: false };
什麼是使用一個比其他的權衡?
可以說我想檢查某個屬性是否存在於Object中。我一直在尋找方法有兩種:obj.hasOwnProperty(key)vs直接使用obj引用[key]
如果(object.hasOwnProperty(鍵)){/ *做* /}
OR
如果(對象[關鍵]) {/ *做* /}
假設,我們永遠不會有object = { key: false };
什麼是使用一個比其他的權衡?
object[key]
檢查整個對象鏈,包括原型鏈。
object.hasOwnProperty(key)
檢查以確定key
屬性是否直接分配給對象並且不在原型鏈中查找。
那麼,使用哪一個取決於你想要的結果。
看到一個簡單的演示,使用hasOwnProperty
屬性:http://jsfiddle.net/jfriend00/6zhv87rk/這是一個對象的原型。
您通常會使用object.hasOwnProperty(key)
當你key
可以是任意字符串,要絕對保證它永遠不會衝突內置的對象原型屬性。事實上,如果你真的想保護自己,你甚至可以使用這個Object.prototype.hasOwnProperty.call(object, key)
,所以即使hasOwnProperty
屬性可以用於你的對象。像這樣的情況會出現在您將JavaScript對象用作哈希查找或具有任意鍵值的字典型對象時。
當你不關心這樣的衝突時,你通常會使用object[key]
,因爲你知道你的對象上有什麼類型的鍵,並且你知道它們不會衝突,因爲這個版本只是更短,更容易閱讀。
嘗試使用'object = {key:false}',你會看到不同之處。 – JJJ 2014-11-08 07:18:38
+1。沒想到這一點。但是,我的測試案例永遠不會出現這種情況。 – myusuf 2014-11-08 07:23:25