跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 Javascript 的变量定义一点疑惑,求各位大佬指导
未分類
25 11 月 2020

关于 Javascript 的变量定义一点疑惑,求各位大佬指导

关于 Javascript 的变量定义一点疑惑,求各位大佬指导

資深大佬 : wymanAtV2 1

js 里面直接访问一个未声明的变量是会报错“xxx is not defined”的,但是当我创建一个对象或者直接使用宿主对象时,例如浏览器环境下 window.variable,是会返回一个 undefined 的,这一点有点疑惑,这和 undefined 的定义不是有冲突吗,variable 还没声明啊?
求各位指教
大佬有話說 (10)

  • 資深大佬 : wyongjian

    后者的 undefined 只是说明没有返回值吧

  • 主 資深大佬 : wymanAtV2

    @wyongjian 嗯嗯,这个您启发了我,不过我还是不太能理解两者在使用的表现上的不同,例如有一个函数需要一个参数,我传递参数的时候 func(a,),此时我传入一个未定义的变量 variable,肯定是会报错的;但是我传入一个对象的属性,他是会默认传入一个 undefined 的;

  • 資深大佬 : xiongotom

    undefined 不就是未声明嘛,符合定义啊。可能你的疑惑时为啥直接访问会报错,直接使用变量的时候是不会在 window 上自动创建一个变量的;但比如 a = 10 这样子,是会在 window 上自动创建一个变量,原因是有个 LHS 和 RHS 的区别,简单理解就是在赋值操作符的左边就会自动创建,右边则不会。

  • 主 資深大佬 : wymanAtV2

    @xiongotom 嗯嗯,首先感谢您的解惑,您的解释我是理解的;我疑惑的点在于后者,为什么直接访问一个对象里的属性就不会有报错?

  • 資深大佬 : zzzzzzggggggg

    undefined 会在以下几种情况返回:
    1. 没有返回语句的函数运行结束,就会返回 undefined
    2. 访问数组中不存在的下标和对象不存在的属性
    3. void 运算符会返回 undefined

    其他的情况按照你理解的返回即可

  • 主 資深大佬 : wymanAtV2

    @zzzzzzggggggg

  • 資深大佬 : marcong95

    @wymanAtV2 #4 因为 window.a 这种用法既可以作为 LHS 又可以作为 RHS ?或者说 window 本身就是一个已经定义的变量,window.a 只是对已定义的变量指向的对象的一个属性 a 进行操作,而这种操作并不是对未定义变量的操作,所以不会产生错误?

  • 資深大佬 : xiongotom

    @marcong95 是的。js 中的定义就是这样,如果方法或者语句中操作的变量没有赋值,就会返回 undefined ;直接使用变量会报错是因为 js 引擎一直找到 window 都找不到这个变量。而用 window.a 的话,就是前面那一条规则,js 变量上的属性本就无需特地的去声明一下。

  • 資深大佬 : yzqtdu

    还有一点很多人没提到的是,JS 里的对象十分灵活,可以动态添加、删除属性,因此设计的时候允许访问未定义属性可以避免一些不必要的麻烦,例如根据条件添加某个属性,如果条件不成立未绑定则后面的访问报错,成立则顺利运行,这样所有对该属性的访问都要加上是否存在的判断,if (prop in obj && typeof obj[prop] == “function”) obj[prop]()

  • 主 資深大佬 : wymanAtV2

    感谢各位的指点

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具