1

我什至不知道从哪里开始寻找这个问题的答案,我以前从未见过这样的语法!

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

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

4

3 回答 3

2

它是? :运算符,它的传统至少可以追溯到 70 年代的 C。

测试表达式? 表达式1表达式2

如果测试表达式的计算结果是真实的,那么 expression1 会被计算,这就是整个事物的值。否则为表达式 2。

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

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

于 2013-06-30T21:13:12.320 回答
0

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

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

此链接包含有关多种语言的此速记的更多信息:http ://en.wikipedia.org/wiki/%3F :

希望有帮助。

于 2013-06-30T21:19:06.717 回答
0

您看到的是条件三元运算符(尝试搜索该术语,您会发现很多。)

这扩展到

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

if(!_d) 更多的是检查它是否被声明,它是说如果 _d 是falsy或评估为 false,在 javascript 中相当多的 evuates 为 false。

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

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

于 2013-06-30T21:22:07.873 回答