在我正在制作的文字冒险中,我对房间的对象文字看起来像这样:
room : {
// some info,
exits : {
north : -1,
east : "house",
south : "forest",
west : -1
}
}
并且在我的功能中移动它说:
if (room["exits"][direction] !== -1) {// go that way}
else {print "you can't go that way!"}
现在我想通过测试相关方向的键是否在对象中退出来节省空间。 所以文字会去:
room : {
// some info,
exits : {
east : "house",
south : "forest"
}
}
......我的if
陈述应该是什么样的?确定给定键名是否在对象中退出的“正确”方法是什么?
答案 0 :(得分:4)
您可以使用in
operator:
if (direction in room.exits) {
// go that way
} else {
console.log("you can't go that way!");
}
答案 1 :(得分:3)
如果绝对没有机会它会为空,你可以做空白字符串,零或任何其他'假的'JS值
if(room.exits[direction]) { // go that way }
else {print "you can't go that way!"}
我还对p.s.w.g发布的'in'运算符进行了速度测试,因为我从来没有真正想过使用它。我发现了一些有趣的结果,如果你在任何一个循环中运行它,你应该考虑。
http://jsperf.com/test-in-operator-vs-if
似乎“in”运算符在IE和Chrome上显得比较慢,但在Firefox上它的速度几乎快了两倍。
答案 2 :(得分:1)
你应该这样做:
if (room.exits.south) {// go that way}
else {print "you can't go that way!"}
就是这样。
当“south”未定义时(或者当它为零或空字符串或文字为false时),谓词的计算结果为false。