2014-11-08 54 views
-1

可以說我想檢查某個屬性是否存在於Object中。我一直在尋找方法有兩種:obj.hasOwnProperty(key)vs直接使用obj引用[key]

如果(object.hasOwnProperty(鍵)){/ *做* /}

OR

如果(對象[關鍵]) {/ *做* /}

假設,我們永遠不會有object = { key: false }; 什麼是使用一個比其他的權衡?

+1

嘗試使用'object = {key:false}',你會看到不同之處。 – JJJ 2014-11-08 07:18:38

+0

+1。沒想到這一點。但是,我的測試案例永遠不會出現這種情況。 – myusuf 2014-11-08 07:23:25

回答

3

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],因爲你知道你的對象上有什麼類型的鍵,並且你知道它們不會衝突,因爲這個版本只是更短,更容易閱讀。

+0

增加了一些情況,爲什麼你會使用其中一種。 – jfriend00 2014-11-08 09:28:11

+0

非常感謝。另外,哪個會更快? – myusuf 2014-11-08 09:49:30

+1

我不知道哪個會更快。就所有性能問題而言,您必須爲您的特定情況設計一個有意義的測試,並在幾種不同的瀏覽器中測量性能。 – jfriend00 2014-11-08 09:52:37