我总是必须在没有任何东西的else条件中置null。有办法解决吗?
例如,
condition ? x = true : null;
基本上,有没有办法做到以下几点?
condition ? x = true;
现在它显示为语法错误。
供参考,这里有一些真实的示例代码:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
我总是必须在没有任何东西的else条件中置null。有办法解决吗?
例如,
condition ? x = true : null;
基本上,有没有办法做到以下几点?
condition ? x = true;
现在它显示为语法错误。
供参考,这里有一些真实的示例代码:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
当前回答
简单的方法是:
if (y == x) z;
其他回答
我们现在也有了“null coalescing operator”(??)。它的工作原理类似于“OR”操作符,但仅在左侧表达式为空或未定义时返回,对于其他假值则不返回。
例子:
const color = undefined ?? 'black'; // color: 'black'
const color = '' ?? 'black'; // color: ''
const color = '#ABABAB' ?? 'black'; // color: '#ABABAB'
在你的情况下,我认为三元运算符是多余的。可以使用||和&&操作符将变量直接赋值给表达式。
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null ;
将变成:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
它更清晰,更“javascript”风格。
不,它需要三个操作数。这就是为什么它们被称为三元算符。
然而,对于你的例子,你可以这样做:
if(condition) x = true;
不过,如果将来需要添加多个语句,使用大括号会更安全:
if(condition) { x = true; }
编辑:既然你提到了你的问题适用于的实际代码:
if(!defaults.slideshowWidth)
{ defaults.slideshowWidth = obj.find('img').width()+'px'; }
简单地说
if (condition) { code if condition = true };
更多情况下,人们使用逻辑运算符来缩短语句语法:
!defaults.slideshowWidth &&
(defaults.slideshowWidth = obj.find('img').width() + 'px');
但在你的特定情况下,语法可以更简单:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width() + 'px';
这段代码将返回默认值。如果为默认值,则为slideshowWidth。slideshowWidth的值为true,否则为obj.find('img').width() + 'px'值。
有关详细信息,请参见逻辑运算符的短路计算。