1

変数またはプロパティが null ではなく、CS で未定義ではないかどうかを確認したいことがよくあります。の接尾辞以外に「真実」チェックのショートカットはあり?ますundefinedか?

4

1 に答える 1

1

@Austin Mullins、それは本当ですが、すべてのチェックが生成されると想定し、変数の使用に基づいてCoffeeScriptコンパイラが異なる結果を生成することがわかりました。

使用前に宣言される (値が割り当てられる) 変数は、!= nullをチェックします。undefinedを明示的に代入しても(Javascriptは未定義を返すvoid 0にコンパイルされます)、コンパイラの動作は変わりません。

関係なく結果は同じですか?期待どおりに動作するようです。

私が見つけたもののデモ (プレビュー リンク)、http://preview.tinyurl.com/cmo6xw7

リンクをたどり、[実行] ボタン (右上)をクリックします。

コード...

((arg) ->
    str = "Hello World!"
    num = 42
    foo = arg

    # Lets see what the compiler produces  
    alert "str is #{str}" if str?
    alert "num is #{num}" if num?
    alert "foo is #{foo}" if foo?
    # bar has not been assigned a value or used until now
    alert "bar is #{bar}" if bar?

    # Lets assign str to something that isn't straight up null
    # cs will translate undefined into the expression that returns undefined
    str = undefined

    # Shorthand
    if str?
        alert "str? is #{str}"
    else
        alert "str? is empty"

    # Explicit checks
    if typeof str isnt "undefined" && str isnt null
        alert "str explicit check is #{str}"
    else
        alert "str explicit check is empty"

 ).call()
于 2013-03-21T00:19:30.410 に答える