使用“;在“;运算符和JavaScript中的点表示法
Difference in using "in" operator and dot notation in 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 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
}
那么,为什么只有当变量被赋值时,点符号才起作用呢?我知道一个愚蠢的问题,但到目前为止我还不能得到确切的答案!
正如Johan所指出的,检查得到的是一个假值。
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");
window.a
在给它一个值之前就是undefined
,并且
if (undefined) === if (Boolean(undefined))
由于布尔值(未定义)===false,因此未到达if语句中的console.log
。
转到您的控制台并像这样玩:
var a;
未定义
'a' in window
真实
window.a
未定义
a = 1
1
window.a
1
'a' in window
真实
in
关键字检查上下文中是否存在变量。因此,使用in
的表达式将始终根据其存在性而不是其值返回true
或false
。
.
注释访问上下文中变量的值。因此,使用.
的表达式可能会返回任何值,包括undefined
,如果不是的话。
现在您已经知道了为每个表达式返回的内容,请将其与if语句中返回每个值时的求值内容混合起来。
正如您可能知道的,undefined
将评估为false
,1
和true
都将评估为true,从而产生您所面临的行为。
相关文章:
- 这是什么 ==- javascript 运算符
- React中的数据集表示
- jQuery/JS包含运算符或类似运算符
- Javascript逻辑运算符和字符串/数字
- 模运算符前的双水平线
- jQuery's trim()的前缀为not运算符
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- 用于验证JS中逻辑运算符表达式的正则表达式
- 什么's是相当于LINQ's SelectMany运算符
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- JavaScript-===vs===运算符性能
- 使用“;在“;运算符和JavaScript中的点表示法
- 应用于表示负十六进制的字符串的 JS 一元加运算符的行为
- 为什么使用时出现“意外的”.“||运算符,以表示括号中的默认值
- 车把中的索引运算符表示意外令牌,
- 二进制逻辑运算符在Javascript中表示一个条件