在swift中,x = y ?? z
表示x等于y,除非y为null / nil,在这种情况下,x等于z。什么是JavaScript等价物?
答案 0 :(得分:9)
x = y || z; //x is y unless y is null, undefined, "", '', or 0.
如果您想从0
值中排除falsey
,那么
x = ( ( y === 0 || y ) ? y : z ); //x is y unless y is null, undefined, "", '', or 0.
或者,如果您想从false
值中排除falsey
,那么
x = ((y === 0 || y === false || y) ? y : z);
<强>样本强>
var testCases = [
[0, 2],
[false, 2],
[null, 2],
[undefined, 2],
["", 2],
['', 2],
]
for (var counter = 0; counter < testCases.length - 1; counter++) {
var y = testCases[counter][0],
z = testCases[counter][1],
x = ((y === 0 || y === false || y) ? y : z);
console.log("when y = " + y + " \t and z = " + z + " \t then x is " + x);
}
答案 1 :(得分:3)
ternary operator将获得类似的结果
x = (y ? y : z)
严格来说,为避免implicit typeconversion,您可能需要类似
的内容x = (null !== y ? y : z)
像x = x || y
这样的短路分配感觉就像是对||
运算符的误用,这可能导致混乱。但是我认为这是一个使用的味道问题。