我不知道这个结构是如何被调用的,但可能会被修剪。
someCondition ? function1() : function2();
JsHint说他期待一个分配或功能,而是看到一个表达。 所以我想知道它能在所有浏览器中正常工作吗?
答案 0 :(得分:2)
这称为conditional (ternary) operator ?:
,实际上相当于:
if (someCondition) {
function1();
}
else {
function2();
}
JsHint不喜欢它并不意味着它不是一个有效的语法,它只是意味着它是糟糕的风格,但它仍然可以工作。
答案 1 :(得分:1)
你可以自己试试
true ? console.log('a') : console.log('b')
这是一个三元运算符,JSHint告诉你的是,使用这样的三元运算符可能会令人困惑。 JSHint非常自以为是,它不仅会警告你可能会破坏代码的事情,还会警告你作者不喜欢的事情。
如果你更喜欢更精简的短片(不受欢迎),你可能想试试recently released ESLint
一般来说,你应该在赋值中使用三元运算符,而不是函数调用。
我的方法如下:
if (something) {
fn1();
} else {
fn2();
}
在分配的情况下,这很好:
var foo = something ? 'foo' : 'bar';
第一个例子的可能替代方案是:
var foo = {
fn1: fn1,
fn2: fn2
};
foo[bar ? 'fn1' : 'fn2']();
然而,在大多数真实场景中,这可能更令人困惑。