2个js 基础问题

Question 1

function bar(){

    //....

}

在chrome 环境下:


console.log(this.bar)//此时会显示bar函数

console.log(window.bar)//此时会显示bar函数

所以可以看作bar绑定到了window上.


那么:

在node环境下:


console.log(this.bar)//undefined

console.log(global.bar)//undefined

此时bar被绑定到了什么上面?


Question 2

var obj = {};

console.log(obj.a)//undefined

正常情况下,这里应该会报obj.a is not defined. 

实际上这里执行这段代码是给了obj一个a的属性,并将值赋值为undefined.


这是我在一本书中看到了,突然一下不记得答案了.

我记得,这里是一个对象的bug,所以必须这样去处理.


在这里我想知道,这个bug是什么


qq_花开花谢_0
浏览 589回答 7
7回答

墨色风雨

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

米脂

首先感谢你们的回复,谢谢!前段时间看这个问题的回复时,已看懂第一个问题。但第二个问题,总感觉你们的答案都有点文不对题的意思。给我的答案大概是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.因此,在这里的第一步,就会报错,所以会导致对象属性赋值失败。若有异议,欢迎指出!谢谢!

PIPIONE

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

幕布斯6054654

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

繁花如伊

Question 1Question 2正常情况下就是undefined
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript