好奇其他人将如何为此创建后备:som var = 数字 0 ||假

Curious how others would create a fallback for this: som var = number 0 || false?

本文关键字:var som 数字 其他人 创建 好奇      更新时间:2023-09-26

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

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

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

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

所以,如果我碰巧引用了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,因为即使它没有正确引用也没有错误。所以这实际上并不重要,但我总是喜欢有后备,所以这就是我好奇的原因。

如果您希望 falsey 值通过测试,那么测试可能需要显式查找 undefined ,而不仅仅是 falsey 值。

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

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

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

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

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

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

可以简化为

var varReference = 'item1' in someBigObj.someObj && someBigObj.someObj['item1'];