我见过这段代码here。在其他地方我也记不起一些类似的代码。
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || "fx";
这是什么意思?
我根本不理解 a)但我认为*我理解 b)是这样的:
如果type
为false,则type
将等于"fx"
,否则type
将等于之前的任何内容。
我不确定,但也许我错了。
这个语法叫什么?条件变量? :P我尝试使用谷歌搜索答案,但不知道在我的查询中使用什么。
答案 0 :(得分:4)
<强> A)强>
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
是
的同义词if (jQuery.fx) {
if (jQuery.fx.speeds[time]) {
time = jQuery.fx.speeds[time];
}
}
与
几乎相同<强> b)中强>
type = type || "fx";
是
的同义词if (!type) {
type = "fx";
}
只需检查type
是否不是false
,null
,undefined
。如果是,type
正在填充fx
答案 1 :(得分:2)
对于A,我们正在做的是if-else语句的快捷方式。问号前的内容引用if语句,下一个元素是“then”语句,最后一部分是“else”语句。
var action = my_status == 'hungry' ? 'eat' : 'do not eat';
在这种情况下,它会转化为这样的东西:
if (my_status == 'hungry')
action = 'eat';
else
action = 'do not eat';
对于B,双管(||)表示“或”。我们在这里评估的是基于一个或另一个是否为真的布尔值。
var not_hungry = ate_lunch || full;
如果ate_lunch OR full为true,则not_hungry也为真。
您可以使用双&符号(&amp;&amp;)表示同样的事情,即AND。
var single = nerdy && cocky;
如果书呆子和自大是真的,那么单身也是如此。如果只有其中一个是真的,那么语句解析为false(因为对于single来说两者都必须为真)。
希望有所帮助。 :)
编辑(h / t Phrogz): 值得注意的是||和&amp;&amp;在JavaScript中,不仅要对布尔值进行操作和求值,而且要测试“真实性”并评估两个操作数之一的“防护”操作符。 (
答案 2 :(得分:1)
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
可以写成:
if (jQuery.fx) {
if (jQuery.fx.speeds[time]){
time = jQuery.fx.speeds[time];
}
}
在这种情况下,三元操作(? :
)是多余的。如果JQuery.fx.speeds [time]不存在,则语句返回time
- 因此它返回自己。
更一般:somevar = a || b
称为短路评估。基本上它是一种简短的写作方式
if (a) {
somevar = a;
} else {
somevar = b;
}
答案 3 :(得分:0)
a)当且仅当jQuery.fx.speeds[time]
和jQuery.fx
存在时,将时间设置为jQuery.fx.speeds[time]
:
if(jQuery.fx && jQuery.fx.speeds[time])
time = jQuery.fx.speeds[time];
b)您的描述是正确的
答案 4 :(得分:0)
是的,你对它的作用是正确的。它被称为short-circuit评估。它与C的ternary operator类似。
答案 5 :(得分:0)
这是一个三元运算符
http://en.wikipedia.org/wiki/Ternary_operator
我试图链接到第一个结果......
https://www.google.com/#hl=en&cp=4&gs_id=1j&xhr=t&q=wiki+inline+if&
答案 6 :(得分:0)
a。)使用三元运算符构建,简单来说就是
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
等同于:
time = if(jQuery.fx){ jQuery.fx.speeds[time]; } else { time : time; }
b。)你是正确的,如果已定义类型,将定义该类型,否则它将默认为“fx”。但是,我不确定它是否有技术名称,除非它是OR
的逻辑表达式