2014-01-07 76 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")) { 

}