我发现自己在过去的几周里遇到了同样的错误,当使用||
运算符分配默认值时,如果没有设置第一个值:
(myVariable || 'somestring')
只要myVariable
不是0
,这就有效,但如果它是0
则会出现问题,因为它会将其视为假值。这可以通过检查它是否为零来解决,但它很快变成一个不可读的混乱,例如(myVariable >= 0 ? myVariable : 'somestring')
。
允许myVariable
成为0
但仍然算作真值的最简单,最正确的方法是什么?请注意,myVariable
必须仍为原始值,因此使用!!
运算符不起作用。
答案 0 :(得分:1)
仅包含逻辑运算符的解决方案:
function getValue(v) {
return v !== 0 && (v || 'someString') || 0;
}
document.write(getValue(null) + '<br>');
document.write(getValue(false) + '<br>');
document.write(getValue(undefined) + '<br>');
document.write(getValue(0) + '<br>');
document.write(getValue(1) + '<br>');
document.write(getValue('42') + '<br>');
另一项提案
function getValue(v) {
return v || v === 0 ? v : 'someString';
}
document.write(getValue(null) + '<br>');
document.write(getValue(false) + '<br>');
document.write(getValue(undefined) + '<br>');
document.write(getValue(0) + '<br>');
document.write(getValue(1) + '<br>');
document.write(getValue('42') + '<br>');
答案 1 :(得分:0)
试试这个:
x === 0 || X ? x:y
提供相同的输出:
x!== 0&amp;&amp; (x || y)|| 0;
但我认为更容易阅读
答案 2 :(得分:0)
我的解决方案:
(myVariable.toString() || 'somestring')
你需要尝试/捕捉
答案 3 :(得分:0)
我找到了简单的解决方案:
(myVariable === 0?&#39; 0&#39; :( myVariable ||&#39; somestring&#39;)