我总是必须在没有任何东西的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;
当前回答
更多情况下,人们使用逻辑运算符来缩短语句语法:
!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'值。
有关详细信息,请参见逻辑运算符的短路计算。
其他回答
为什么不写一个函数来避免else条件呢?
这里有一个例子:
Const when =(语句,文本)=>(语句)?文本:null; const math =当(1 + 2 == 3,'数学是正确的'); const obj = when(typeof "Hello Word" === " number ", "Object is a string"); console.log(数学); console.log (obj);
你也可以为任何对象实现这个函数。下面是一个string类型的例子:
Const when =(语句,文本)=>(语句)?文本:null; String.prototype.if = when; const msg = 'Hello World!'; const givenMsg = msg.if长度> 0,'有消息!Yayyy !”); console.log (givenMsg);
首先,三元表达式不是if/else结构的替代品——它等价于返回值的if/else结构。也就是说,if/else子句是代码,三元表达式是表达式,这意味着它返回一个值。
这意味着几件事:
只有当在=的左边有一个变量将被分配返回值时,才使用三元表达式 当返回值是两个值之一时,只使用三元表达式(如果合适,则使用嵌套表达式) 表达式的每一部分(after ?和after:)应该返回一个没有副作用的值(表达式x = true返回true,因为所有表达式都返回最后一个值,但它也改变了x,而x对返回值没有任何影响)
简而言之,三元表达式的“正确”用法是
var resultofexpression = conditionasboolean ? truepart: falsepart;
而不是你的例子条件?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'; }
简单地说
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'值。
有关详细信息,请参见逻辑运算符的短路计算。