我不知道这种结构是如何被调用的,但可能会更简洁。
someCondition ? function1() : function2();
JsHint 说他期待一个赋值或函数,而是看到了一个表达式。所以我想知道它会在所有浏览器中正常工作吗?
我不知道这种结构是如何被调用的,但可能会更简洁。
someCondition ? function1() : function2();
JsHint 说他期待一个赋值或函数,而是看到了一个表达式。所以我想知道它会在所有浏览器中正常工作吗?
这称为条件(三元)运算符?:
,它实际上等效于:
if (someCondition) {
function1();
}
else {
function2();
}
JsHint 不喜欢它的事实并不意味着它不是一个有效的语法,它只是意味着它的风格不好,但它仍然可以工作。
你可以自己试试
true ? console.log('a') : console.log('b')
这是一个三元运算符,JSHint 告诉您的是,使用这样的三元运算符可能会造成混淆。JSHint 非常固执己见,它不仅会警告您可能会破坏代码的事情,还会警告您作者不喜欢的事情。
如果你更喜欢更精简的 linter(无主见),你可能想试试最近发布的 ESLint
一般来说,您应该在assignments中使用三元运算符,而不是在函数调用中使用。
我的方法如下:
if (something) {
fn1();
} else {
fn2();
}
在分配的情况下,这很好:
var foo = something ? 'foo' : 'bar';
第一个示例的可能替代方法是:
var foo = {
fn1: fn1,
fn2: fn2
};
foo[bar ? 'fn1' : 'fn2']();
然而,在大多数真实场景中,这可能更加令人困惑。