JavaScript中的三元运算符没有“Else”
我一直不得不在其他没有任何条件的情况下使用null 。 反正有吗? 例如 
 condition ? x = true : null; 
基本上,有没有办法做到这一点:
 condition ? x = true; 
现在它显示为一个语法错误
仅供参考,下面是一些真实的示例代码:
 !defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null; 
	
首先,一个三元expression式不能代替一个if / else结构 – 它相当于一个返回值的if / else结构。 也就是说,if / else子句是代码,三元expression式是一个expression式 ,意味着它返回一个值。
这意味着几件事情:
-  只有在要赋予返回值的=的左侧有variables时才使用三元expression式
- 当返回的值是两个值中的一个时,只使用三元expression式(或者如果拟合的话,使用嵌套expression式)
-  expression式的每个部分(在?之后)应该返回一个没有副作用的值(expression式x = true返回true,因为所有expression式都返回最后一个值,但是也会改变x而不会对返回值产生任何影响)
总而言之 – 正确使用三元expression式是
 var resultofexpression = conditionasboolean ? truepart: falsepart; 
 而不是你的榜样condition ? x=true : null ; condition ? x=true : null ;  ,你使用三元expression式来设置x的值,你可以使用这个: 
  condition && (x = true); 
这仍然是一个expression,因此可能无法通过validation,所以更好的方法是
  void(condition && x = true); 
最后一个将通过validation。
但是如果期望值是一个布尔值,那么只需要使用条件expression式本身的结果
 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'; } 
 var x = condition || null; 
更多的时候,人们可以使用逻辑运算符来缩短语句语法:
 !defaults.slideshowWidth && (defaults.slideshowWidth = obj.find('img').width()+'px'); 
但在特定情况下,语法可能更简单
 defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px'; 
 如果defaults.slideshowWidth的值为true,则此代码将返回defaults.slideshowWidth值,否则返回obj.find('img').width()+'px'值。 
有关详细信息,请参阅逻辑运算符的短路评估 。
你可以写
 x = condition ? true : x; 
所以当条件是错误的时候x是没有修改的。
这相当于
 if (condition) x = true 
编辑:
 !defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null 
有几个select – 我不是说这些更好/更糟 – 只是替代品
作为第三个参数传入null是因为现有值为null。 如果你重构并改变条件,那么存在这样的危险,这不再是真实的。 作为三元卫士的第二select传递出现的价值:
 !defaults.slideshowWidth = ? defaults.slideshowWidth = obj.find('img').width()+'px' : defaults.slideshowwidth 
更安全,但也许不太好看,更多的打字。 在实践中,我可能会写
 defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px' 
在你的情况下,我看到三元运算符是多余的。 您可以使用||,&&运算符将variables直接分配给expression式。
 !defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null ; 
会变成 :
 defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px'; 
更清楚的是,它更像“javascript”风格。