Javascript 三元运算

Javascript ternary operation

我在一些代码中看到了以下内容。 || 有必要吗?错误的?如果有必要,怎么办?

object.key = myData ? myData.value : false || false;

快速回顾

?是三元运算符

:分隔三元运算符的输出状态

|| 通常是 OR 运算符,但在这种情况下,我认为它旨在用作合并运算符

= myData ? myData.value : false

...将 return 来自 myData 的值不为空;否则它 return 是假的。

false || false

...将始终 return 错误。

= myData || false

... return myData 如果它不为 null,则为 false。

如果非要我猜的话,我想也许最初的代码是这样写的:

= myData.value || false

...在他们意识到他们需要一个 non-null 对象来获得 value.

之前

也许他们的意思是

= (myData ? myData.value : false) || false;

...如果它是 non-null,它将 return myData.value,如果 myData 或 myData.value 为空,则为 false。

但如果那是你想要的,我会写的

= myData ? myData.value || false : false;

只有当需要假值 false 而不是假值时才有意义。

但这需要括号来实现。

var myData;
console.log(myData ? myData.value : false || false);   // false
console.log((myData ? myData.value : false) || false); // false

myData = {};
myData.value = undefined;
console.log(myData ? myData.value : false || false);   // undefined
console.log((myData ? myData.value : false) || false); // false

myData.value = 0;
console.log(myData ? myData.value : false || false);   // 0
console.log((myData ? myData.value : false) || false); // false

myData.value = '';
console.log(myData ? myData.value : false || false);   // ''
console.log((myData ? myData.value : false) || false); // false

myData.value = 'foo';
console.log(myData ? myData.value : false || false);   // foo
console.log((myData ? myData.value : false) || false); // foo

myData.value = true;
console.log(myData ? myData.value : false || false);   // true
console.log((myData ? myData.value : false) || false); // true

我很确定这里不需要 "false || false"。但是,下面的表达式更有意义。

object.key = (myData ? myData.value : false) || false;

这使用 'or' 将值(可以是真值或假值)与假值进行比较。因此,在 myData.value 不是 'truthy' 的情况下,对象键将被设置为 'false'.

由于 operator precedence,逻辑或 || 在条件(三元)运算符之前计算。在所有情况下,这意味着您的表达式的计算结果仅为:

object.key = myData ? myData.value : false;

关于 myData 的可能值的考虑现在只是噪音。