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
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.
因此,在这里的第一步,就会报错,所以会导致对象属性赋值失败。
若有异议,欢迎指出!谢谢!
TA贡献1876条经验 获得超7个赞
添加回答
举报

