美文网首页
js小问题

js小问题

作者: 浴火小青春 | 来源:发表于2016-01-03 23:31 被阅读27次

今天看到一个js的问题,想了好久之后不得其解,到晚上才发现了问题所在,题目是这样的:

if(!("a" in window)){
  var a=1;
}
alert(a);

想必大家应该看到过这个题目,他的正确答案是<code>1</code>.
我的思考过程如下:


首先在js里边有个hoist机制,也就是变量和函数声明提升机制。根据我之前的理解。
第一步,if语句没起到隔离作用域的作用,变量a还是声明在全局的。所以接下来就要看判断条件
<code>!("a" in window)</code>是否成立了,他决定着变量a是否被被赋值。
第二步,接下来我们看<code>!("a" in window)</code>是否成立,注意======,我也就是在这里犯迷糊了,此处开始是错误的=========
我开始的时候想的是"a" 是一个字符串,如果他之前在被声明为全局变量了,那他应该存在于window对象里的,
从事实上推断,<code>"a" in window</code>应该是<code>true</code>,那么这样赋值语句才会没有起作用,从而弹出来的是 1.但是为什么<code>"a" in window</code>是true呢?字符串“a" 在之前从未出现过,所以就开始瞎想了,可能是条件语句里的类型转换,也查到了很重要的资料JavaScript真值表,不过对于此题还是一无所获
。==========
后来才想起来"a" in window 指的应该是判断window对象里边是否有a这个属性,就像for-in-obj 还有obj[name]一样,问题就这样解决了。应为a被声明为全局变量的,相当于window.a。

相关文章

  • js小问题

    1 js中typeof、instanceof与constructortypeof返回一个表达式的数据类型的字符串,...

  • js小问题

    今天看到一个js的问题,想了好久之后不得其解,到晚上才发现了问题所在,题目是这样的: 想必大家应该看到过这个题目,...

  • Nodejs中@elastic/elasticsearch的使用

    GitHub的地址:https://github.com/elastic/elasticsearch-js 小问题...

  • js常见小问题

    在循环中 加事件不能使用i 使用i的话会自动变成 最大的循环数 用索引 index 在script的里给需要的加上...

  • JS 路上的小问题

    1.图片加载问题 想得到图片的宽和高 img.width() img.height一定要保证图片加载完成使用loa...

  • Java导出excel

    首先是控制层Controller excel工具类 jsp js 这里出现一个小问题,location.href这...

  • node.js 安装小问题

    windows: 在官网https://nodejs.org/en/download/下载 安装完成之后,找到安装...

  • js继承遇到的小问题

    这两天在看js继承方面,它不像OC那种传统的类继承。js继承方式还是挺多的。比如:原型继承、原型冒充、复制继承 原...

  • Moment.js 转换 UTC 格式的 2 个小问题

    在使用 Moment.js 转换为 UTC 格式的时候,我们可能会遇到 2 个小问题。 如果你使用 ('2021-...

  • Vue.js 小问题解惑

    疑惑1:为什么有时候看到一些 $ 符号,这代表什么?解惑1:Vue 实例有一些官方提供的有用的实例属性与方法,当然...

网友评论

      本文标题:js小问题

      本文链接:https://www.haomeiwen.com/subject/pbdohttx.html