使用上的差异;在;JavaScript中的运算符和点表示法
我有一个问题正困扰着我。如果我声明一个使用上的差异;在;JavaScript中的运算符和点表示法,javascript,Javascript,我有一个问题正困扰着我。如果我声明一个var a,然后尝试使用“in”操作符对其进行测试,我会得到一个真实的结果,如果我使用点符号进行相同的测试,我会得到一个错误的结果,例如 var a; if('a' in window) { console.log('a in window'); // this is written to the console } if (window.a) { console.log('window.a'); // nothing happening her
var a
,然后尝试使用“in”操作符对其进行测试,我会得到一个真实的结果,如果我使用点符号进行相同的测试,我会得到一个错误的结果,例如
var a;
if('a' in window) {
console.log('a in window'); // this is written to the console
}
if (window.a) {
console.log('window.a'); // nothing happening here
}
现在我注意到当我给一个值时,两个输出都起作用。。。看看这个,注意我是如何检查它是否不存在的:
var a;
if('a' in window) {
console.log('a in window'); // this is written to the console
}
if (!window.a) {
console.log('!window.a'); // this is written to the console
}
a = 1;
if (window.a) {
console.log('window.a'); // this is written to the console
}
那么,为什么只有当变量被赋值时,点符号才起作用呢?我知道这是一个愚蠢的问题,但到目前为止我还不能得到一个明确的答案 正如约翰指出的,检查得到的是一个错误的值
if ('a' in window) console.log("a exists");
if (window.a) console.log("window.a is a truthy value");
if (!window.a) console.log("window.a is a falsey value");
if (typeof window.a != "undefined") console.log("window.a is not undefined");
窗口。在给它赋值之前,a
是未定义的
,并且
if (undefined) === if (Boolean(undefined))
由于Boolean(undefined)===false,if语句中的
console.log
未到达。转到控制台,按如下方式播放:
var a;
未定义
真的
未定义
一,
一,
真的
关键字中的检查上下文中是否存在变量。因此,在
中使用的表达式将始终根据其存在而不是其值返回true
或false
notaction在上下文中访问变量的值。因此,使用
的表达式可能会返回任何值,包括未定义的值(如果不是)
现在您已经知道了每个表达式返回的内容,可以将其与在if语句中返回每个值时所执行的计算混合起来
您可能知道,undefined
将计算为false
,而1
和true
都将计算为true,从而导致您面临的行为。这是因为window.a
yeildsundefined
-它将计算为false
'a' in window
window.a
a = 1
window.a
'a' in window