简写Javascript变量语法

时间:2013-06-30 21:10:54

标签: javascript

我甚至不知道从哪里开始搜索这个问题的答案,我之前没有看过这样的语法!

function (_d) {
    this.xiSWFPath = !_d ? "expressinstall.swf" : _d;
    this.setAttribute("useExpressInstall", true);
}

这等同于

this.xiSWFPath = if not (_d) [declared true, else false] then expressinstall.swf else _d

我很欣赏这是一个初学者的问题! 我在哪里可以了解有关此语法的更多信息?

3 个答案:

答案 0 :(得分:2)

这是? :运算符,它可以追溯到70年代至少回归到C。

  

test-expression expression1 expression2

如果测试表达式的计算结果是真实的,那么将对expression1进行求值,这就是整个事物的值。否则,它是表达式。

运算符绑定非常松散,从左到右(请注意,PHP程序员!)。使用括号总是安全且(通常)更具可读性。

请注意,这是表达式语法的一部分。构造可以在任何地方作为任何表达式的一部分出现。在您的示例中,它是赋值操作右侧的表达式(作为var语句的一部分)。

答案 1 :(得分:0)

问题this.xiSWFPath = !_d ? "expressinstall.swf" : _d;中的行等于:

if (! _d ) {
    this.xiSWFPath = "expressinstall.swf";
} else {
    this.xiSWFPath = _d;
}

此链接提供了有关此简写的更多信息,适用于多种语言:http://en.wikipedia.org/wiki/%3F

希望有所帮助。

答案 2 :(得分:0)

您看到的是ConditionalTernary Operator(尝试搜索该术语,您会发现很多。)

这扩展到

if(!_d) 
  this.xiSWFPath = "expressioninstall.swf";
else 
  this.xiSWFPath = _d;

if(!_ d)更多的是检查它被声明,它是说_d是falsy,或者评估为false,在javascript中很多都是假的。

if(_d in [undefined, null, 0, false, '', NaN]) //psydo-code does not work.

如果_d没有很好的价值使用rexpressioninstall.swf,则更加非正式地使用_d。