在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 2個js 基礎(chǔ)問題

2個js 基礎(chǔ)問題

Question 1
function bar(){
    //....
}

在chrome 環(huán)境下:

console.log(this.bar)//此時會顯示bar函數(shù)
console.log(window.bar)//此時會顯示bar函數(shù)

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


那么:
在node環(huán)境下:

console.log(this.bar)//undefined
console.log(global.bar)//undefined

此時bar被綁定到了什么上面?

Question 2
var obj = {};
console.log(obj.a)//undefined

正常情況下,這里應(yīng)該會報obj.a is not defined.
實際上這里執(zhí)行這段代碼是給了obj一個a的屬性,并將值賦值為undefined.

這是我在一本書中看到了,突然一下不記得答案了.
我記得,這里是一個對象的bug,所以必須這樣去處理.

在這里我想知道,這個bug是什么

回答
編輯回答
好難瘦
Question 1

clipboard.png

Question 2

正常情況下就是undefined

2017年8月30日 02:24
編輯回答
青檸

問題1

在node環(huán)境中,一個js文件最頂層的this指向的是modules.exports,你可以通過exports.bar = bar觀察到。而沒有賦值給exports的,自然不會在this看到。
而global也沒有,與node上下文以及寫法有關(guān)。上下文可以參考這個。
以及寫法這三者的區(qū)別。

function d() {
    var a = 1
    function b() {}
    c = 2
}

問題2

undefined是一個合法的javascript的值,所以自然不會報error。

但如果obj是undefined的話,取obj.a就會報錯,因為一個undefined不可能有一個a屬性。

2017年11月16日 15:15
編輯回答
安于心

Node.js那個有人回答的挺好的就不說了,在CHROME下全局叫window,而在node.js下全局叫g(shù)lobal。
在JS中,undefined和undeclared是兩回事,如果聲明過一個變量但還未賦值,那它是“未定義”的,而一個變量未曾聲明就調(diào)用,那它是“未聲明”的。
一般來說報錯:referenceError: xx is not defined會讓人誤解為變量是undefined,而實際上更準(zhǔn)確來講它是undeclared的。
而不管是undefined還是undeclared,typeof的處理方式都是返回undefined

2017年6月10日 23:47
編輯回答
愛礙唉

回答一下第二個問題:JS運行環(huán)境分嚴(yán)格模式,和 普通模式 在兩種情況下是不一樣的

2018年5月16日 13:42
編輯回答
離殤

對于第二個問題,我在Chrome下面測試,看起來好像obj并沒a這個屬性

clipboard.png

2018年4月6日 16:17
編輯回答
汐顏

請認(rèn)真區(qū)別null和undefined 本身這兩者的設(shè)計出發(fā)點就不一樣 同時 系統(tǒng)不存在賦值為undefined這種說法 也不要在開發(fā)中手動賦值

2017年2月27日 13:03
編輯回答
離魂曲

首先感謝你們的回復(fù),謝謝!

前段時間看這個問題的回復(fù)時,已看懂第一個問題。但第二個問題,總感覺你們的答案都有點文不對題的意思。給我的答案大概是2個意思,一個是 undefinedundeclared 的區(qū)別,另一個就是 obj.a 不會報錯, obj.a.b 會報錯。然后我的問題并不是這2個意思。

在Google搜索了這個問題,沒找到問題的答案,但找到了這個問題真正應(yīng)該叫什么--為什么js查找不存在的屬性不會報錯。運用你們的話來說,即為什么 obj.a 不會報錯。

找到了問題真正的稱呼,然后在Google的幫助下,找到了這個bug是什么.

-
如果 js 這樣設(shè)置,obj.a 會報 obj.a is not defined ,即報錯。
那么在對象屬性賦值這種情況下:

var obj = {};
obj.a = 1;

obj.a = 1 這里執(zhí)行了2步操作,第一步是 RHS(right-hand-side右查找) 查找 obj.a,第二步是賦值為1.
因此,在這里的第一步,就會報錯,所以會導(dǎo)致對象屬性賦值失敗。

若有異議,歡迎指出!謝謝!
2017年10月16日 13:45