查找一个未声明变量时,如a,与window.a的区别,为啥window.a不报错
先来看下代码:
<!DOCTYPEhtml><html><head><title></title></head><body><scripttype="text/javascript">window.onload=function(){console.log('打印window.a结果为:'+window.a);console.log('打印a'+a);}</script></body></html>
按你所说,我们在未进行任何定义的情况下,分别打印window.a和a,结果如下:
window.a结果是undefined,因为你想打印的是window对象的a属性,而window对象是JavaScript默认自带的对象,它是存在的,只不过是window对象中的属性a是不存在的。
但是如果你想打印a,那么a会认为是一个变量,可是在我们的代码中并没有声明a,所以会捕获一个参数引用异常。
这两种结果的主要原因是因为window对象是默认存在的对象,如果你再打印一下b.a,
代码如下:
<!DOCTYPEhtml><html><head><title></title></head><body><scripttype="text/javascript">window.onload=function(){console.log('打印window.a结果为:'+window.a);console.log('打印b.a结果为:'+b.a);}</script></body></html>
那么结果就是这样的:
结果提示我们说b没有定义,而根本没有提到我们引用的后面的.a。
综上所述,原因就是window对象比较特殊。
window.a是获取对象属性,不存在就是undefined,如果直接用a,未定义会报错
少年啥也别说,上代码
window是全是全局的对象,window.a就是获取这个全局的属性a,未申明就是undefined,而a的话就直接报错了,未定义~
window是全局对象
个人认为UncaughtReferenceError报错主要是看引用的对象是否存在,不存在才报错,若只是属性不存在,就不报错。
运行结果
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。