测试JavaScript对象文字中是否存在键名

时间:2013-12-22 01:36:50

标签: javascript object-literal

在我正在制作的文字冒险中,我对房间的对象文字看起来像这样:

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陈述应该是什么样的?确定给定键名是否在对象中退出的“正确”方法是什么?

3 个答案:

答案 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。