2014-01-07 73 views
1

我有一個有趣的問題,在Firefox中被破壞的地圖。當我測試空映射是否有字符串「watch」時,它將返回true並返回watch()函數。我想讓它返回false,因爲我沒有在地圖上添加「watch」鍵。一個簡單的例子Javascript地圖返回功能

我通常創建一個像

var myMap = {} 
myMap["apple"] = 1; 
myMap["pear"] = 2; 

基本地圖,並測試如果映射對象我會寫

if ("apple" in myMap) { ... } 

而問題是,當我要添加如果地圖沒有準備好包含地圖,則將字符串「觀看」到地圖上。所以當我檢查地圖是否包含「watch」時,它會返回true。

if ("watch" in myMap) { ... } 
// This also returns true. and returns the function watch() 

有關如何避免此行爲的任何想法?

感謝

+3

對象有內置的特性,[Object.watch(HTTPS://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch)是其中之一,使用一個尚未使用的屬性名稱,並且它自行解決。 – adeneo

回答

2

這是因爲從對象的原型對象字面繼承。你可以創建一個空的對象,從沒有繼承:

var myMap = Object.create(null); 

或用hasOwnProperty檢查:

if (myMap.hasOwnProperty('watch')) { 
    ... 
} 
+0

謝謝。創建空對象是我需要做的。 –

2

您可以嘗試

var myMap = {}; 
myMap["apple"] = 1; 
myMap["pear"]=2; 

if (myMap.hasOwnProperty("apple")) { 

} 

if (myMap.hasOwnProperty("watch")) { 

}