web-dev-qa-db-ja.com

CoffeeScript Undefined

変数が作成されていないかどうかを確認するためのJavaScriptでは、単に

if (typeof MyVariable !== "undefined"){ ... }

私はコーヒースクリプトでそれをどのように行うのだろうか?...

if (MyVariable?false){ ... }

しかし、これはMyVariableが関数であるかどうかをチェックし、そうであればMyVariable(false)を呼び出し、そうでなければvoid(0)またはそのようなものを呼び出します。

89
Jaider

最後に、この簡単な方法を見つけました:

if (MyVariable?){ ... }

生成されるもの:

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }

2014年4月7日更新デモリンク

enter image description here

163
Jaider

まず、あなたの質問に答えるために:

if typeof myVariable isnt 'undefined' then # do stuff

Magrangsのソリューションは、未定義とfalseを区別する必要がある場合を除いて、ほとんどの場合に機能します(たとえば、myVariableがtrue、false、またはundefinedの場合)。

そして、単に指摘するために、括弧で条件をラップするべきではなく、中括弧を使用するべきではありません。

thenキーワードは、すべてが同じ行にある場合に使用できます。そうでない場合は、インデントを使用して、条件内にあるコードを示します。

if something  
    # this is inside the if-statement  
# this is back outside of the if-statement

お役に立てれば!

26
soundslikeneon

この回答はcoffeescriptの古いバージョン用です。最新の回答が必要な場合は、上の Jaiderの回答 を参照してください(2014年7月現在)

このcoffeescript はあなたが望むことをします:

_if not MyVariable?
  MyVariable = "assign a value"
_

生成するもの:

_if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
  MyVariable = "assign a value";
}
_

N.b. this code のようにMyVariableをundefinedに設定しても、最初にMyVariableに割り当てを行うと、次のようにコンパイルされます。

_if (!(MyVariable != null)) {
  MyVariable = "assign a value";
}
_

CoffeeScripts _!=_(疑問符)で使用される_Existential Operator_がundefinednullと等しくなるように強制するため、これが機能すると考えています。

追伸if (MyVariable?false){ ... }を実際に動作させることはできますか?存在演算子とfalseの間にスペースがない限り、私にとってはコンパイルされません。つまり、_MyVariable? false_は、falseMyVariableたとえば

_if MyVariable? false
  alert "Would have attempted to call MyVariable as a function"
else
  alert "but didn't call MyVariable as it wasn't a function"
_

生産物:

_if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
  alert("Would have attempted to call MyVariable as a function");
} else {
  alert("but didn't call MyVariable as it wasn't a function");
}
_
14
AJP
typeof MyVariable isnt "undefined" 

from js2coffee

11
Jonathan

Jaider's answer 上記(評判が不十分なためコメントできませんでした)に加えて、別のケースであることに注意してくださいオブジェクト/配列内にある場合:

someArray['key']?

に変換されます:

someArray['key'] != null

js2coffee.org のスクリーンショット:

js2coffee.org

9
LongYC

私はただ使用します:

if (myVariable)
    //do stuff

Undefinedは偽であるため、myVariableがundefinedでない場合のみ処理を行います。

0、 ""、nullの値に対して「処理を行う」ことに注意する必要があります。

6
Magrangs

変数を未定義の非null変数に割り当てる最もクリーンな方法は、unlessを使用することです。

unless ( myVar? )
    myVar = 'val'
3
fooling

なぜORイディオムを使用しないのですか?

myVar or 'val'

そのため、未定義でない限り、結果はmyVarに等しくなり、その場合は「val」に等しくなります。

2
l3x