-1

Javascriptのevalは次のような式を評価できることを知っています

(true) && (false)
(true) || (false) 
 etc.

ただし、evalの仕様には、次のような未知数を含むステートメントの評価が含まれていますか?

(true) && (null)
(true) || (null)
(null) && (null)
(null) || (null)
 etc.

私はこれをコードで試し、それが実行されることを確認しましたが、これは予想される動作ですか?Javascriptの評価仕様はこれを言っていますか?

4

3 に答える 3

1

Javascript evalはトライステートブール論理を正しく評価しますか?

「正しい」を定義します。Javascriptは動作を定義します。EvalJavascriptでは、文字列をjavascriptコードとして評価します。SQLは動作も定義します。動作は両方で異なります。

javascriptでは、ブール式nullのように動作します(偽物です)。false

0、、、、NaN(そしてもちろん)""はすべて偽物です。オブジェクト、空でない文字列、およびゼロ以外の数値(そしてもちろん)はすべて真実です。nullundefinedfalsetrue

&&最初の偽の引数(存在する場合)または最後の引数(遅延AND)を返し、残りを評価しません。null && "anything"ですnull。これは、のようなステートメントで使用できますconsole && console.log && console.log()

||最初の真の引数(存在する場合)または最後の引数(遅延OR)を返し、残りを評価しません。null || "something"です"something"。これは、次のようなステートメントで使用できます。var xhr = XmlHttpRequest || ItsReplacementInOlderBrowsers

!nullに評価されtrueます。ブランチif(null) ...を評価します。else同じことが偽物にも当てはまります。

技術的には、未定義の変数はundefinedであり、ではありませんnull。ただし、どちらも偽物です。

于 2012-12-12T14:46:13.280 に答える
0

nullはfalseと評価されますが、nullに関連する詳細があることに注意してください(例:===の使用)。

このページをチェックしてください。これについて詳しく説明します:http: //www.mapbender.org/JavaScript_pitfalls :_null、_false、_undefined、_NaN

于 2012-12-12T14:38:17.850 に答える
0

nullは「不明」ではありません。比較でオペランドとして配置されると、ブール値(false)に強制変換されます。null詳細については、この「真理値表」の行を参照してください。

の動作に「仕様」があるとは思いません。これはeval、javascriptの文字列表現を取得し、現在のコンテキストでjavascriptとして実行するだけです。その理由はありません

eval('(true) && (null)');

とは異なる結果が得られます

(true) && (null)

また、evalは悪です。

于 2012-12-12T14:40:09.370 に答える