如果co.chkShowRSB
为假,预期的结果是什么?我希望它是错误的,但这是它的工作方式吗?为什么?
var test = chkShow:co.chkShowRSB || true;
如果co.chkShowRSB
为假,预期的结果是什么?我希望它是错误的,但这是它的工作方式吗?为什么?
var test = chkShow:co.chkShowRSB || true;
在true
您的情况下,(所谓的“短路或”)运算符true
的第二个操作数也是如此。||
共同的规则是...
var x = a || b; // = a (and b won't be evaluated), if it's a truthy value, b otherwise
var y = a && b; // = a (and b won't be evaluated), if it's a falsy value, b otherwise.
false || true
是真的。不存在带有“或真”的布尔项可以为假的情况。
您应该使用三级运算符。如果 chkShow:co.chkShowRSB 为布尔值,您的代码将始终返回 true;
var test = chkShow:co.chkShowRSB == false ? false : true;
好的,所以你现在得到的图片是x = false || true;
真实的。为什么?很容易知道短路运算符的使用与以下操作相同:
x = (false ? false : true);
但是,它主要用于设置函数参数的默认值,所以我猜你假设x
如果第一个操作数是undefined
. 除了显式检查它们之外,没有办法专门过滤掉未定义的值。然后你应该使用:
x = val === undefined ? defaultVal : val;
或者,因为undefined
不需要undefined
,并且您想绝对确定:
x = (function(val,undefined)//second argument will be the true undefined value
{
return (val === undefined ? defaultVal : val);
})(val);//don't pass second argument