在Javascript的OR语句中区分0和null
我的函数中有以下代码,我想给变量newValue赋值在Javascript的OR语句中区分0和null,javascript,Javascript,我的函数中有以下代码,我想给变量newValue赋值 var newValue=fieldValue | | originalValue | | masterValue 这里,如果originalValue=0,java脚本将其视为false/null,并将masterValue分配给newValue。 相反,我想将originalValue(0)赋值给newValue 有没有一种不用额外一行代码就能实现的方法?是的,但它有点复杂(使用三元运算符) (假设您希望即使在字段值中也分配0)是,但它有
var newValue=fieldValue | | originalValue | | masterValue代码>
这里,如果originalValue=0,java脚本将其视为false/null,并将masterValue分配给newValue。
相反,我想将originalValue(0)赋值给newValue
有没有一种不用额外一行代码就能实现的方法?是的,但它有点复杂(使用三元运算符)
(假设您希望即使在字段值中也分配0)是,但它有点复杂(使用三元运算符)
(这假设即使在字段值中也要分配0)您要使用
var newValue = fieldValue;
if (newValue == null)
newVAlue = originalValue;
if (newValue == null)
newValue = masterValue;
|
运算符非常草率,当您需要处理错误值时,不应使用它。您需要使用它
var newValue = fieldValue;
if (newValue == null)
newVAlue = originalValue;
if (newValue == null)
newValue = masterValue;
|
运算符非常松散,在需要处理错误值时不应使用。使用谓词定义“良好”值并将其传递给函数:
var isValid = x => !!x || x === 0;
var newValue = [fieldValue, originalValue, masterValue].find(isValid);
如果以旧的MSIE为目标,.find
可以替换为.filter(…)[0]
var isValid=x=>!!x | | x==0;
log([1,2,3].find(isValid));
log([false,0,3].find(isValid));
log([null,0,3].find(isValid));
console.log([undefined,0,3].find(isValid));
console.log([“”,0,false]。查找(isValid));
console.log([“”,null,false].find(isValid))代码>使用谓词定义“良好”值并将其传递给函数:
var isValid = x => !!x || x === 0;
var newValue = [fieldValue, originalValue, masterValue].find(isValid);
如果以旧的MSIE为目标,.find
可以替换为.filter(…)[0]
var isValid=x=>!!x | | x==0;
log([1,2,3].find(isValid));
log([false,0,3].find(isValid));
log([null,0,3].find(isValid));
console.log([undefined,0,3].find(isValid));
console.log([“”,0,false]。查找(isValid));
console.log([“”,null,false].find(isValid))代码>如果您想使用一行代码来实现此功能,这里有一个选项:
var fieldValue = false;
var originalValue = 0;
var masterValue = 5;
var newValue = fieldValue || (originalValue===0)?0:originalValue || masterValue;
console.log(newValue); // newValue=0
如果您想使用一行代码实现此功能,请选择以下选项:
var fieldValue = false;
var originalValue = 0;
var masterValue = 5;
var newValue = fieldValue || (originalValue===0)?0:originalValue || masterValue;
console.log(newValue); // newValue=0
您想专门检查null
然后,而不仅仅是任何假值?实际上,对于null和false,只是不想检查0。然后不,没有额外的代码,无论您是否将代码放在同一行,这取决于你。我很确定这是==
与===
问题的重复。@ssube一点也不,|
运算符与等式无关。你想专门检查null
而不是任何虚假值吗?实际上,对于null和false,只是不想检查0。然后,不,如果没有额外的代码,就无法做到这一点,你是否将代码放在同一行取决于你。我很确定这是=
与==
问题的重复。@ssube一点也不,| |
运算符与等式无关现在尝试执行false | false==0
,看看你得到了什么(提示:你需要严格比较)?实际上没有,只在originalValue中。@Y.Solanki更新(仅用于originalValue
并修复@adenao注释)是的,非严格比较会告诉你false
和0
是同一件事,这是|
遇到的同一个问题。现在试着做false | | false==0
,看看你得到了什么(提示:你需要严格比较)?事实上没有,只有原始值。@Y.Solanki更新(仅适用于原始值
和@adenao注释的修复)是的,非严格的比较会告诉你,false
和0
是一回事,这是|
的问题。不错,虽然OP在注释中提到0应该只对originalValue
变量有效,而不是它们中的任何一个。不错,尽管OP在注释中提到0应该是valid仅用于原始值
变量,而不是其中任何一个变量。