我甚至不知道从哪里开始搜索这个问题的答案,我之前没有看过这样的语法!
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
我很欣赏这是一个初学者的问题! 我在哪里可以了解有关此语法的更多信息?
答案 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)
您看到的是Conditional或Ternary 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。