Javascript:如果未定义的运算符不工作,则分配
下面是一个示例,如果参数是未定义的,我使用Javascript:如果未定义的运算符不工作,则分配,javascript,undefined,default-value,Javascript,Undefined,Default Value,下面是一个示例,如果参数是未定义的,我使用|运算符指定默认值 output = function (data) { console.log("data.flag =", data.flag); } main = function (flag) { output({ flag: flag || true; }); } main(true); // data.flag = true main(false); // data.flag = true
|
运算符指定默认值
output = function (data) {
console.log("data.flag =", data.flag);
}
main = function (flag) {
output({
flag: flag || true;
});
}
main(true); // data.flag = true
main(false); // data.flag = true
但是,该操作将被忽略,因此始终会指定默认值。我怎样才能解决这个问题?此处打开-您必须打开控制台才能查看输出。当您传入false时,您将看到此消息
flag: false || true;
如果你知道|
是如何工作的,如果左侧是错误的,那么它将占据右侧
您需要检查未定义,因为false为false
flag: flag!==undefined ? flag : true;
另一个选项是检查参数长度
flag: arguments.length ? flag : true;
当你通过false时,你有这个
flag: false || true;
如果你知道|
是如何工作的,如果左侧是错误的,那么它将占据右侧
您需要检查未定义,因为false为false
flag: flag!==undefined ? flag : true;
另一个选项是检查参数长度
flag: arguments.length ? flag : true;
||
不是一个“未定义的赋值运算符”,尽管它的语义允许它以某种方式使用,使它看起来像是这样。是OR接线员。当且仅当左侧为“Falsy”时,它才会计算右侧,也就是说,当转换为布尔值时,它为false
。发件人:
如果可以转换为true,则返回expr1
;否则,返回expr2
。因此,当与布尔值一起使用时,|
如果任一操作数为true
,则返回true
;如果两者都是false
,则返回false
尝试使用更明确的测试:
output({
flag: (typeof flag === "undefined") ? true : flag;
});
||
不是一个“未定义的赋值运算符”,尽管它的语义允许它以某种方式使用,使它看起来像是这样。是OR接线员。当且仅当左侧为“Falsy”时,它才会计算右侧,也就是说,当转换为布尔值时,它为false
。发件人:
如果可以转换为true,则返回expr1
;否则,返回expr2
。因此,当与布尔值一起使用时,|
如果任一操作数为true
,则返回true
;如果两者都是false
,则返回false
尝试使用更明确的测试:
output({
flag: (typeof flag === "undefined") ? true : flag;
});
你应该这样做:
flag: typeof flag === 'undefined' ? true : !!flag;
|
不适合您想要使用它。它将返回第一个操作数的结果(如果为真),否则返回第二个操作数。例如false | | true
返回true
我的示例将返回true
,如果flag
是undefined
,并将flag
转换为布尔值(因此true
或false
),否则-因此您将得到一个干净的标志,没有技巧:)
还有一个提示:不要使用你不懂的技巧:)。它们会导致奇怪的错误。您应该这样做:
flag: typeof flag === 'undefined' ? true : !!flag;
|
不适合您想要使用它。它将返回第一个操作数的结果(如果为真),否则返回第二个操作数。例如false | | true
返回true
我的示例将返回true
,如果flag
是undefined
,并将flag
转换为布尔值(因此true
或false
),否则-因此您将得到一个干净的标志,没有技巧:)
还有一个提示:不要使用你不懂的技巧:)。它们会导致奇怪的错误。您应该检查类型
main = function (flag) {
output({
flag: (flag===undefined)?true:flag;
});
}
你应该检查一下类型
main = function (flag) {
output({
flag: (flag===undefined)?true:flag;
});
}
如果
标志
为布尔值,则标志| |真
将始终等于真
。标志| |真
将始终等于真
如果标志
为布尔值。您知道是否有一个包装函数(标记的类型==“未定义”)?真:国旗代码>在公共库中,例如您知道是否有的包装函数(typeof flag==“undefined”)?真:国旗代码>在公共库中,例如