1

我不知道这种结构是如何被调用的,但可能会更简洁。

someCondition ?  function1() : function2();

JsHint 说他期待一个赋值或函数,而是看到了一个表达式。所以我想知道它会在所有浏览器中正常工作吗?

4

2 回答 2

2

这称为条件(三元)运算符?:,它实际上等效于:

 if (someCondition) {
     function1();
 }
 else {
     function2();
 }

JsHint 不喜欢它的事实并不意味着它不是一个有效的语法,它只是意味着它的风格不好,但它仍然可以工作。

于 2013-11-08T12:14:26.463 回答
1

你可以自己试试

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']();

然而,在大多数真实场景中,这可能更加令人困惑。

于 2013-11-08T12:14:34.753 回答