在Javascript的OR语句中区分0和null

在Javascript的OR语句中区分0和null,javascript,Javascript,我的函数中有以下代码,我想给变量newValue赋值 var newValue=fieldValue | | originalValue | | masterValue 这里,如果originalValue=0,java脚本将其视为false/null,并将masterValue分配给newValue。 相反,我想将originalValue(0)赋值给newValue 有没有一种不用额外一行代码就能实现的方法?是的,但它有点复杂(使用三元运算符) (假设您希望即使在字段值中也分配0)是,但它有

我的函数中有以下代码,我想给变量newValue赋值

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仅用于
原始值
变量,而不是其中任何一个变量。