我对Firefox中的地图有一个有趣的问题。当我测试一个空地图是否有字符串“watch”时,它将返回true并返回函数watch()。我希望它返回false,因为我没有将“watch”键添加到地图中。一个简单的例子
我通常会创建一个像
这样的基本地图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()
有关如何避免此行为的任何想法?
由于
答案 0 :(得分:2)
你可以尝试
var myMap = {};
myMap["apple"] = 1;
myMap["pear"]=2;
if (myMap.hasOwnProperty("apple")) {
}
if (myMap.hasOwnProperty("watch")) {
}
答案 1 :(得分:2)
这是因为对象文字继承自Object原型。您可以创建一个从无任何内容继承的空对象:
var myMap = Object.create(null);
或查看hasOwnProperty
:
if (myMap.hasOwnProperty('watch')) {
...
}