Osc*_*son 125 javascript optimization syntax-error
我总是不得不放入null没有任何东西的其他条件.不管怎么说呢?例如
condition ? x = true : null;
Run Code Online (Sandbox Code Playgroud)
基本上,有办法吗?
condition ? x = true;
Run Code Online (Sandbox Code Playgroud)
现在它显示为语法错误
仅供参考,这里有一些真实的示例代码:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
Run Code Online (Sandbox Code Playgroud)
Sea*_*sey 201
首先,三元表达式不是if/else构造的替代 - 它等同于返回值的if/else构造.也就是说,if/else子句是代码,三元表达式是表达式,意味着它返回一个值.
这意味着几件事:
=要为其指定返回值的左侧有一个变量时才使用三元表达式x = true返回true,因为所有表达式都返回最后一个值,但是也会更改x,而x不会对返回的值产生任何影响)简而言之 - 三元表达的"正确"使用是
var resultofexpression = conditionasboolean ? truepart: falsepart;
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码condition ? x=true : null ;来代替您使用三元表达式设置值的示例x:
condition && (x = true);
Run Code Online (Sandbox Code Playgroud)
这仍然是一个表达式,因此可能无法通过验证,因此更好的方法是
void(condition && x = true);
Run Code Online (Sandbox Code Playgroud)
最后一个将通过验证.
但话说回来,如果期望值是布尔值,只需使用条件表达式本身的结果
var x = (condition); // var x = (foo == "bar");
Run Code Online (Sandbox Code Playgroud)
更新 关于您的样本,这可能更合适:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
Run Code Online (Sandbox Code Playgroud)
In *_*ico 18
不,它需要三个操作数.这就是为什么他们被称为三元运营商.
但是,对于您的示例,您可以这样做:
if(condition) x = true;
Run Code Online (Sandbox Code Playgroud)
如果你需要在将来添加多个语句,那么使用大括号会更安全:
if(condition) { x = true; }
Run Code Online (Sandbox Code Playgroud)
编辑:现在您提到了您的问题适用的实际代码:
if(!defaults.slideshowWidth)
{ defaults.slideshowWidth = obj.find('img').width()+'px'; }
Run Code Online (Sandbox Code Playgroud)
小智 12
我们现在还有“空合并运算符”(??)。它的工作原理与“OR”运算符类似,但仅在左侧表达式为 null 或未定义时返回它,对于其他虚假值则不会返回它。
例子:
const color = undefined ?? 'black'; // color: 'black'
const color = '' ?? 'black'; // color: ''
const color = '#ABABAB' ?? 'black'; // color: '#ABABAB'
Run Code Online (Sandbox Code Playgroud)
phi*_*reo 11
var x = condition || null;
Run Code Online (Sandbox Code Playgroud)
更常见的是,人们使用逻辑运算符来缩短语句语法:
!defaults.slideshowWidth &&
(defaults.slideshowWidth = obj.find('img').width()+'px');
Run Code Online (Sandbox Code Playgroud)
但在您的特定情况下,语法可以更简单
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
Run Code Online (Sandbox Code Playgroud)
defaults.slideshowWidth如果defaults.slideshowWidth求值为true,则此代码将返回obj.find('img').width()+'px'值,否则返回值.
有关详细信息,请参阅逻辑运算符的短路评估.
你可以写
x = condition ? true : x;
Run Code Online (Sandbox Code Playgroud)
因此,当条件为false时,x不会被修改。
这相当于
if (condition) x = true
Run Code Online (Sandbox Code Playgroud)
编辑:
!defaults.slideshowWidth
? defaults.slideshowWidth = obj.find('img').width()+'px'
: null
Run Code Online (Sandbox Code Playgroud)
有几种选择-我并不是说这些更好/更糟-只是选择
将null作为第三个参数传递是可行的,因为现有值是null。如果您重构并更改条件,则有可能不再存在这种危险。在三元组中,将存在值作为第二选择传递,以防此:
!defaults.slideshowWidth =
? defaults.slideshowWidth = obj.find('img').width()+'px'
: defaults.slideshowwidth
Run Code Online (Sandbox Code Playgroud)
更安全,但可能看起来不太好,而且打字更多。在实践中,我可能会写
defaults.slideshowWidth = defaults.slideshowWidth
|| obj.find('img').width()+'px'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110273 次 |
| 最近记录: |