2

所以,我遇到了一个错误,并认为它很有趣。一旦我坐下来思考了 5 秒钟,它是有道理的,但很好奇未来将如何克服它。

所以,我在 obj 中设置了一些哈希值。(来自较大 obj 的代码片段)。

   someBigObj : {
       someObj : {
         item1 : 0
         item2:  1
         item4:  2
         item3:  3
      }
  }

因此,我以这种方式设置它是因为我需要引用与与这些项目关联的数据相对应的数组位置。

所以,如果我碰巧引用了 item1——看看我们得到了什么。

var varReference = someBigObj.someObj['item1'] || false;
// which is equivalent to 
var varReference = 0 || false;

看看那里发生了什么?那个引用是 0。所以 varReference 总是假的。在这种情况下,我实际上想要数字 0,因为我需要访问一个数组元素。我认为把它串起来对我来说很奇怪,因为它不是一个字符串,而是一个整数。我怎样才能仍然使用 || 的这个后备?false,但实际上将数字 0 视为有效值。

注意:我知道我可以明确地测试等等。只是好奇是否有捷径或本机 js(我不知道)可以解决我的解决方案。认为类似的东西会起作用,但没有。

 Number(0) || false

附加说明:我最后没有放|| false,即使它没有被正确引用,也没有错误。所以这实际上并不重要,但我总是喜欢有后备,所以这就是我好奇的原因。

4

3 回答 3

3

如果您希望虚假值通过测试,那么测试可能需要明确查找undefined,而不仅仅是虚假值。

var varReference = someBigObj.someObj['item1'] !== undefined ? someBigObj.someObj['item1'] : false;

请记住,许多合法值都是错误的,例如0, "", null(和其他)。

于 2013-11-01T17:56:20.103 回答
2

您可以使用内联 if 来检查您的值是否undefined明确。

var varReference = (typeof(someBigObj.someObj['item1']) !== 'undefined') ? someBigObj.someObj['item1'] : false;
于 2013-11-01T17:56:16.437 回答
1

与其尝试查看属性中的值(以及它的虚假性,有时会让您失望),不如使用in运算符检查该属性是否存在于对象中:

var varReference = 'item1' in someBigObj.someObj
                     ? someBigObj.someObj['item1']
                     : false;

可以简化为

var varReference = 'item1' in someBigObj.someObj && someBigObj.someObj['item1'];
于 2013-11-01T18:03:08.373 回答