修剪器javascript,这样使用它是否正确?

时间:2013-11-08 12:11:08

标签: javascript

我不知道这个结构是如何被调用的,但可能会被修剪。

someCondition ?  function1() : function2();

JsHint说他期待一个分配或功能,而是看到一个表达。 所以我想知道它能在所有浏览器中正常工作吗?

2 个答案:

答案 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']();
然而,在大多数真实场景中,这可能更令人困惑。