开发者社区> 问答> 正文

js查找一个未声明变量时,如a,与window.a的区别,为啥window.a不报错 ?报错

查找一个未声明变量时,如a,与window.a的区别,为啥window.a不报错

展开
收起
爱吃鱼的程序员 2020-06-24 13:50:09 656 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    先来看下代码:

    <!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报错主要是看引用的对象是否存在,不存在才报错,若只是属性不存在,就不报错。

    运行结果

    2020-06-24 13:50:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载