Javascript 奇怪的是,其他人会如何为此创建回退:som var=number 0 | | false?

Javascript 奇怪的是,其他人会如何为此创建回退:som var=number 0 | | false?,javascript,Javascript,所以,我遇到了一个bug,觉得它很有趣。有一次,我坐下来想了5秒钟,这是有道理的,但我很好奇,将来人们会如何克服它 所以,我在obj中设置了一些哈希。(来自较大obj的代码片段) 所以,我这样设置它是因为我需要引用一个数组位置,该位置对应于与这些项关联的数据 所以,如果我碰巧引用了item1——看看我们得到了什么 var varReference = someBigObj.someObj['item1'] || false; // which is equivalent to var varR

所以,我遇到了一个bug,觉得它很有趣。有一次,我坐下来想了5秒钟,这是有道理的,但我很好奇,将来人们会如何克服它

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

所以,我这样设置它是因为我需要引用一个数组位置,该位置对应于与这些项关联的数据

所以,如果我碰巧引用了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,因为即使没有正确引用,也没有错误。所以这其实并不重要,但我总是喜欢有回退,所以我很好奇。

您可以使用内联if来检查您的值是否未定义

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

如果希望假值通过测试,那么测试可能需要明确查找
未定义的
,而不仅仅是假值

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

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

与其尝试查看属性中的值(以及它的错误,有时您会失败),不如使用以下命令检查对象中是否存在该属性:

可以简化为

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

您的第一个代码块在语法上不正确。不能在静态对象声明中使用
=
。您打算使用
?我只取了一段代码。这比我说的要复杂得多。我只是想把有问题的部分去掉。我明白你的意思了。编辑了我的作品,所以没有混乱。谢谢
var varReference = 'item1' in someBigObj.someObj
                     ? someBigObj.someObj['item1']
                     : false;
var varReference = 'item1' in someBigObj.someObj && someBigObj.someObj['item1'];