這個話題類似: CoffeeScript Existential Operator and this咖啡生存運營商不同compliations
的CoffeeScript中,我使用的是貓王運營商有一個問題:
foo = ->
y = foo()
console.log 'y is null' unless y?
console.log 'x is null' unless x?
編譯爲:
var foo, y;
foo = function() {};
y = foo();
if (y == null) {
console.log('y is null');
}
if (typeof x === "undefined" || x === null) {
console.log('x is null');
}
輸出:
y is null
x is null
所以問題是,因爲y早些時候被指定咖啡採用了捷徑,並假定y不能被定義。但是,從函數返回undefined是有效的。
是否有一種「安全」的方式來檢查y也不是未定義的?
修訂 澄清實施例和說明:
從評論,在第一if語句(Y == NULL)是利用雙等於代替(X ===空)三重相等的,如在第二條if語句。聰明。
我想你在這裏混淆了三個不同的東西:(1)'y'是否存在/是否被聲明? (2)'y'的值是'undefined'嗎? (3)'y'的值是否爲'null'? – flow