Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript if-else速记错误_Javascript_Jquery - Fatal编程技术网

JavaScript if-else速记错误

JavaScript if-else速记错误,javascript,jquery,Javascript,Jquery,这起作用了 if(a != "") { $('.a').css('background','red'); } 但这种速记法并没有起作用 a != "" ? $('.a').css('background', 'red'); 我得到: 令牌的意外结束错误 您正在尝试使用以下形式的: (condition) ? (foo) : (bar); 这是 if (condition) { // do whatever foo is } else { // do whatever

这起作用了

if(a != "") {
    $('.a').css('background','red');
}
但这种速记法并没有起作用

a != "" ? $('.a').css('background', 'red');
我得到:

令牌的意外结束错误

您正在尝试使用以下形式的:

(condition) ? (foo) : (bar);
这是

if (condition) {
    // do whatever foo is
} else {
    // do whatever bar is
}
如果使用此语法(在上述情况下,
bar
),则必须为
else
条件提供一些内容


我想你要做的是:

a != "" && $('.a').css('background', 'red');
它将只运行
$('.a').css('background','red')如果
a!=“”
。这就是所谓的(正如所指出的)


参考文献:

  • 三元表达式:
  • 短路评估:
速记 若然 这将使用&

a != "" && $('.a').css('background', 'red');
当一方的计算结果为true时,另一方运行。

否则 其语法为IF?THEN:ELSE

a != "" ? $('.a').css('background', 'red') : $('.a').css('background', 'blue');
你不能简单地“遗漏”其中的一部分

问题 您使用的速记是IF-THEN-ELSE。您将其视为一个IF-ELSE。要解决此问题,请改用以下代码:

a != "" && $('.a').css('background', 'red');
当你省略另一边是一个IF-ELSE-THEN语句时,它类似于写作

if (a != "") {
    $('.a').css('background', 'red')
} else 

编译器期望一个
来表示速记的下一部分,但它看到一个

更多 我不鼓励您编写缩小的代码,因为它令人困惑,而且难以阅读和修改。我建议使用一种新的方法。要编写干净整洁的代码,请将其写出

if (a !== "") {
    $('.a').css('background', 'red');
}
这样可以清楚地看到您正在做什么,不容易出错,并且更易于编辑。
如果您想学习良好的编码实践,请查看(而不是JSHint)

在这种情况下,您不希望有
其他
案例,
速记
必须有
?,:
操作符

因此,这也是一种选择:

a != "" && $('.a').css('background', 'red');
$('.a').css('background','red')a!=“”
。这就是所谓的

它在这种情况下并不常用,您真的不应该编写这样的代码。我将建议采用这种方法:

if(a != "")  $('.a').css('background','red');
或者更好:

if(a != "") { $('.a').css('background','red'); }
您应该始终编写可读的代码


如果您担心文件大小,只需在数千个JS压缩器的帮助下创建一个缩小版即可。(看看)这个怎么样。。。希望我记得正确,做得比minifier更好

a !== "" && $('.a').css('background','red');

三元表达式是if…then…else
的缩写。您的速记省略了
else
@HoboSapiens我不需要else。那么您就不需要速记了。@HoboSapiens但是如何编写更短更干净的代码呢?
if..
是用JavaScript编写代码的简洁明了的方法。。简短并不意味着“更好”或“更干净”。我总是使用(并推荐)大括号和换行符,但这是另一种风格。
?:
仅当结果将用作表达式时才更合适。否则,请使用
if..[else..]
。虽然这是一个技术上有效的解决方案,但很难看出这是如何比
if(){}
有所改进的。当然,这并没有增加清晰度。@HoboSapiens,我完全同意,不过,OP要求用一种简捷的方式来表达
if
语句。即使是内联
if
也不是很漂亮。(乍一看)很难确定条件i的结束位置和块的开始位置,特别是当条件复杂时。添加
{…}
会有所帮助,但这与目的背道而驰。(顺便说一句,对于使用JS压缩器的建议+1。)是的@jsve,它应该总是避免混淆,因为OP需要。所以,编辑了答案@维克拉特:以前语法是正确的。在元音之前使用An。