0

如果co.chkShowRSB为假,预期的结果是什么?我希望它是错误的,但这是它的工作方式吗?为什么?

var test = chkShow:co.chkShowRSB || true;

4

4 回答 4

1

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.
于 2012-09-26T10:39:23.393 回答
1
false || true 

是真的。不存在带有“或真”的布尔项可以为假的情况。

于 2012-09-26T10:40:17.637 回答
0

您应该使用三级运算符。如果 chkShow:co.chkShowRSB 为布尔值,您的代码将始终返回 true;

var test =  chkShow:co.chkShowRSB == false ? false : true;
于 2012-09-26T10:41:50.400 回答
0

好的,所以你现在得到的图片是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
于 2012-09-26T10:48:09.097 回答