私は、未定義とnullとの違いや、JavaScriptが何かをブール値、特にnullからfalseにキャストしているということをよく理解しています。JavaScript strange nullの動作
私の質問は次のとおりです。FF 9とIE 9の両方で2番目のアラートがトリガーされるのはなぜですか? (これははるかに複雑なスクリプトに基づいている小さなテストスクリプトです。問題を説明するためのものです...)
私は期待しています。演算子が優先され、nullを返す式が返され、ブール値falseにキャストされます。かっこ、!(context.isNull)を追加すると違いはありません。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<script type="text/javascript">
var context = this;
var isNull = null;
var aFunc = function() {
alert(context.isNull);
if (!context.isNull) {
alert("Is !context.isNull really true?");
}
};
aFunc();
</script>
</body>
</html>
'.isNull'はどこから来ましたか? – 0x499602D2
@David 'var isNull = null;' –
@David:グローバルスコープでは、 'var''変数は"グローバルオブジェクト "(この場合は' window')にプロパティとして割り当てられます。したがって、 'var context = this'は' window.context = window'に相当し、 'var isNull = null'は' window.isNull = null'になります。 – ruakh