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 的可能值的考虑现在只是噪音。
我在一些代码中看到了以下内容。 || 有必要吗?错误的?如果有必要,怎么办?
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 的可能值的考虑现在只是噪音。