为了账号安全,请及时绑定邮箱和手机立即绑定

2个js 基础问题

2个js 基础问题

qq_花开花谢_0 2019-03-14 14:15:52
Question 1function bar(){    //....}在chrome 环境下:console.log(this.bar)//此时会显示bar函数console.log(window.bar)//此时会显示bar函数所以可以看作bar绑定到了window上.那么:在node环境下:console.log(this.bar)//undefinedconsole.log(global.bar)//undefined此时bar被绑定到了什么上面?Question 2var obj = {};console.log(obj.a)//undefined正常情况下,这里应该会报obj.a is not defined. 实际上这里执行这段代码是给了obj一个a的属性,并将值赋值为undefined.这是我在一本书中看到了,突然一下不记得答案了.我记得,这里是一个对象的bug,所以必须这样去处理.在这里我想知道,这个bug是什么
查看完整描述

7 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

Node.js那个有人回答的挺好的就不说了,在CHROME下全局叫window,而在node.js下全局叫global。
在JS中,undefined和undeclared是两回事,如果声明过一个变量但还未赋值,那它是“未定义”的,而一个变量未曾声明就调用,那它是“未声明”的。
一般来说报错:referenceError: xx is not defined会让人误解为变量是undefined,而实际上更准确来讲它是undeclared的。
而不管是undefined还是undeclared,typeof的处理方式都是返回undefined

查看完整回答
反对 回复 2019-04-02
?
米脂

TA贡献1836条经验 获得超3个赞

首先感谢你们的回复,谢谢!


前段时间看这个问题的回复时,已看懂第一个问题。但第二个问题,总感觉你们的答案都有点文不对题的意思。给我的答案大概是2个意思,一个是 undefined 和 undeclared 的区别,另一个就是 obj.a 不会报错, obj.a.b 会报错。然后我的问题并不是这2个意思。


在Google搜索了这个问题,没找到问题的答案,但找到了这个问题真正应该叫什么--为什么js查找不存在的属性不会报错。运用你们的话来说,即为什么 obj.a 不会报错。


找到了问题真正的称呼,然后在Google的帮助下,找到了这个bug是什么.


-

如果 js 这样设置,obj.a 会报 obj.a is not defined ,即报错。

那么在对象属性赋值这种情况下:


var obj = {};

obj.a = 1;

obj.a = 1 这里执行了2步操作,第一步是 RHS(right-hand-side右查找) 查找 obj.a,第二步是赋值为1.

因此,在这里的第一步,就会报错,所以会导致对象属性赋值失败。


若有异议,欢迎指出!谢谢!


查看完整回答
反对 回复 2019-04-02
?
PIPIONE

TA贡献1829条经验 获得超9个赞

回答一下第二个问题:JS运行环境分严格模式,和 普通模式 在两种情况下是不一样的


查看完整回答
反对 回复 2019-04-02
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

请认真区别null和undefined 本身这两者的设计出发点就不一样 同时 系统不存在赋值为undefined这种说法 也不要在开发中手动赋值


查看完整回答
反对 回复 2019-04-02
?
繁花如伊

TA贡献2012条经验 获得超12个赞

Question 1

https://img1.sycdn.imooc.com//5ca316350001feac02300240.jpg

Question 2

正常情况下就是undefined


查看完整回答
反对 回复 2019-04-02
  • 7 回答
  • 0 关注
  • 588 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号