我正在使用JSLint来确保我的JavaScript“严格”并且我收到以下错误:
期望分配或函数调用,而是看到表达式
在以下代码中:
(my_var > 0 ) ? $("#abc").html(my_array.join('')) : $("#abc").html('<h2>Hello ' + persons_name);
为什么我会收到这样的错误?另外,我正在使用jQuery,如上面的代码所示,以防万一。
答案 0 :(得分:14)
我的猜测是JSLint不满意,因为你正在使用三元运算符,并且你没有对值进行任何操作。将其重构为等价物:
if (my_var > 0 ) {
$("#abc").html(my_array.join(''));
} else {
$("#abc").html('<h2>Hello ' + persons_name);
}
将消除错误。如果由于某种原因你真的喜欢使用三元运算符,那么使用它的“正确”方式将是:
$("#abc").html((my_var > 0) ? my_array.join('') : '<h2>Hello ' + persons_name);
答案 1 :(得分:8)
我相信这是因为三元运算符计算表达式并返回一个预期分配的值。例如:
var test = (my_var > 0) ? true : false;
但是,您使用它就像常规的if / then / else语句一样。虽然三元运算符确实执行if / then / else,但它传统上用于受让人。
编辑:作为附录:这句话对你有意义吗?var foo = 1;
(my_var > 0) ? true : false;
console.log('hello world');
答案 2 :(得分:2)
您在一行中使用表达式(使用三元运算符的表达式):您的行由表达式唯一组成。
在许多语言中,这被认为是糟糕的编程习惯,可以使用if
语句重写,以使此行更清晰。
答案 3 :(得分:0)
刚问了同样的Q而没有因为某种原因找到这个......
三元组返回一个未被使用的值,因此您不会使用该值来滥用三元结构(即使函数调用是按预期进行的)。