三元運算符允許有條件地評估兩個表達式(如果條件爲真,則爲第一個,否則爲第二個)。
module.exports = global.document ?
factory(global, true) :
function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
};
的分配意味着,條件評估的結果被分配給module.export
。
三元運算符是一個語法糖和工作原理是這樣的:
function ternary_operator(condition, expression1, expression2) {
if (condition) {
return expression1;
} else {
return expression2;
}
}
這樣你就可以轉化代碼:
module.exports = ternary_operator(global.document,
factory(global, true),
function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
});
請注意:
factory(global, true)
and
function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
};
它們都是表達式:factory
函數的激活結果是一個表達式;函數值的定義也是一個表達式。
惰性求
功能ternary_operator
提供急於三元運算符。表達式在條件內被評估,然後返回其中的一個。例如:
var l = ternary_operator(C, A, B);
1. evaluate C
2. evaluate A
3. evaluate B
4. activate function ternary_operator
5. assign to l the result of the function
的Javascript三元運算符是懶:這意味着,條件首先進行評價,則evaluatued其他表達的只有一個,在性能方面獲得。
var l = C ? A : B;
1. evaluate C
2.1 if C is true evaluate A
2.2 if C is false evalutate B
3. assign to l the expression evaluated
三元運營商真的追求什麼。如果它不是布爾值,它將被轉換爲這樣。因此,如果global.document爲null或未定義或「」或任何其他falsy值,它將被視爲false,如果不是,則爲true – juvian
這意味着如果global.document爲true,則module.exports將被分配global.document。如果global.document是虛假的,則將函數(w)分配給模塊。正在輸出的出口 – Chris
[您如何使用? :JavaScript中的(條件)運算符?](https://stackoverflow.com/questions/6259982/how-do-you-use-the-conditional-operator-in-javascript) – juvian