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是什么
在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
}
undefined是一個合法的javascript的值,所以自然不會報error。
但如果obj是undefined的話,取obj.a就會報錯,因為一個undefined不可能有一個a屬性。
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
首先感謝你們的回復(fù),謝謝!
前段時間看這個問題的回復(fù)時,已看懂第一個問題。但第二個問題,總感覺你們的答案都有點文不對題的意思。給我的答案大概是2個意思,一個是 undefined 和 undeclared 的區(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)致對象屬性賦值失敗。
若有異議,歡迎指出!謝謝!
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。