我总是不得不放入null
没有任何东西的 else 条件。有办法解决吗?
例如,
condition ? x = true : null;
基本上,有没有办法做到以下几点?
condition ? x = true;
现在它显示为语法错误。
仅供参考,这是一些真实的示例代码:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
我总是不得不放入null
没有任何东西的 else 条件。有办法解决吗?
例如,
condition ? x = true : null;
基本上,有没有办法做到以下几点?
condition ? x = true;
现在它显示为语法错误。
仅供参考,这是一些真实的示例代码:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
首先,三元表达式不是 if/else 结构的替代品——它等同于返回值的 if/else 结构。也就是说,if/else 子句是代码,三元表达式是表达式,意味着它返回一个值。
这意味着几件事:
=
有要分配返回值的变量时才使用三元表达式x = true
返回 true 因为所有表达式都返回最后一个值,但它也会改变 x 而 x 对返回值没有任何影响)简而言之 - 三元表达式的“正确”使用是
var resultofexpression = conditionasboolean ? truepart: falsepart;
代替您的 example condition ? x=true : null ;
,您可以使用三元表达式来设置 的值x
,您可以使用:
condition && (x = true);
这仍然是一个表达式,因此可能无法通过验证,因此更好的方法是
void(condition && x = true);
最后一个将通过验证。
但话又说回来,如果预期值是一个布尔值,只需使用条件表达式本身的结果
var x = (condition); // var x = (foo == "bar");
关于您的样本,这可能更合适:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
不,它需要三个操作数。这就是为什么它们被称为三元运算符。
但是,对于您所拥有的示例,您可以这样做:
if(condition) x = true;
如果以后需要添加多个语句,使用大括号会更安全:
if(condition) { x = true; }
编辑:既然您提到了您的问题适用的实际代码:
if(!defaults.slideshowWidth)
{ defaults.slideshowWidth = obj.find('img').width()+'px'; }
更常见的是,人们使用逻辑运算符来缩短语句语法:
!defaults.slideshowWidth &&
(defaults.slideshowWidth = obj.find('img').width() + 'px');
但在您的特定情况下,语法可以更简单:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width() + 'px';
defaults.slideshowWidth
如果defaults.slideshowWidth
被评估为真,则此代码将返回obj.find('img').width() + 'px'
值,否则返回值。
有关详细信息,请参阅逻辑运算符的短路评估。
var x = condition || null;
你可以写
x = condition ? true : x;
所以当条件为假时 x 未被修改。
这则相当于
if (condition) x = true
编辑:
!defaults.slideshowWidth
? defaults.slideshowWidth = obj.find('img').width()+'px'
: null
有几个替代方案——我不是说这些更好/更糟——只是替代方案
将 null 作为第三个参数传递有效,因为现有值为 null。如果您重构并更改条件,则存在不再正确的危险。传入现有值作为三元中的 2nd 选择防止这种情况:
!defaults.slideshowWidth =
? defaults.slideshowWidth = obj.find('img').width()+'px'
: defaults.slideshowwidth
更安全,但可能不那么好看,而且打字更多。在实践中,我可能会写
defaults.slideshowWidth = defaults.slideshowWidth
|| obj.find('img').width()+'px'