我很好地理解了undefined和null之间的区别,以及JavaScript将布尔转换为任何东西的事实,特别是null转为false。JavaScript奇怪的空行为
我的问题是这样的:为什么在FF 9和IE 9中触发第二个警报? (这是一个基于更复杂的脚本的小测试脚本,它只是为了说明问题...)
我期待着。运算符优先,表达式返回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 2012-01-27 23:22:42
@David'var isNull = null;' – 2012-01-27 23:24:10
@David:在全局作用域中,var变量被赋值为“全局对象”(本例中为'window')的属性。所以'var context = this'相当于'window.context = window','var isNull = null'相当于'window.isNull = null'。 – ruakh 2012-01-27 23:26:29