課程
/前端開發
/JavaScript
/JavaScript深入淺出
當完成訪問以后零食對象會被銷毀掉,那問什么alert(a.length)返回了6,沒被銷毀,然而alert( a.t )卻返回undifined,被銷毀了呢?
2015-07-27
源自:JavaScript深入淺出 1-4
正在回答
我的理解是,調用length的時候,a會變成String對象,既然是對象那么就有方法和屬性,所以就可以使用length方法了,假設a.length顯示為6然后銷毀,于是我們手賤再來次a.length于是乎再一次a變為了String對象再次調用length屬性,顯示6后再次銷毀;但是a.t=5意味著先將a轉換為String對象由于String對象沒有t屬性,于是a.t在此刻創建了一個臨時屬性t,它和length相比length早已存在在String中而t卻是我們剛剛創建的,于是我們輸入完a.t=5;之后t屬性立即銷毀,如果再次輸入a.t顯示undefined;這很正常t在前邊已被銷毀意味著前邊我們在String對象創建的臨時t屬性已被銷毀,那么此時我們的t屬性編譯器怎么能認識?如果我們alert(a.t=5)這時編譯器會彈出5這個選框,然后t被銷毀,我們再次alert(a.t)會發現是undefined,原因同上t被銷毀了,至于length同樣也被銷毀了,但是length是實打實的存在于String對象中只要轉換為String對象,那么String必然有length屬性。
每次將基本數據類型當作對象使用的時候, 是臨時包裝的,用完一次馬上就會刪除,當a.length的時候,不管如何創建如何刪除,它本來的值就是6是不變的。但是a.t確不一樣,它是不存在的,你第一次賦值給a.t的時候創建了臨時對象,但是調用完馬上刪除, 這個時候你在去訪問a.t的值, 又建立了一個新的臨時對象,肯定值是沒有定義過的。
length是一直存在,而t是不存在的。
_Jack_Han_
舉報
由淺入深學習JS語言特性,且解析JS常見誤區,從入門到掌握
1 回答臨時對象創建后被銷毀
3 回答str對象創建臨時包裝對象的問題
3 回答給a添加了一個方法之后,原來的a=string并沒有被銷毀呀
2 回答關于對象foo.prototype的原型問題?
2 回答對象實例的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-10-15
我的理解是,調用length的時候,a會變成String對象,既然是對象那么就有方法和屬性,所以就可以使用length方法了,假設a.length顯示為6然后銷毀,于是我們手賤再來次a.length于是乎再一次a變為了String對象再次調用length屬性,顯示6后再次銷毀;但是a.t=5意味著先將a轉換為String對象由于String對象沒有t屬性,于是a.t在此刻創建了一個臨時屬性t,它和length相比length早已存在在String中而t卻是我們剛剛創建的,于是我們輸入完a.t=5;之后t屬性立即銷毀,如果再次輸入a.t顯示undefined;這很正常t在前邊已被銷毀意味著前邊我們在String對象創建的臨時t屬性已被銷毀,那么此時我們的t屬性編譯器怎么能認識?如果我們alert(a.t=5)這時編譯器會彈出5這個選框,然后t被銷毀,我們再次alert(a.t)會發現是undefined,原因同上t被銷毀了,至于length同樣也被銷毀了,但是length是實打實的存在于String對象中只要轉換為String對象,那么String必然有length屬性。
2015-12-11
每次將基本數據類型當作對象使用的時候, 是臨時包裝的,用完一次馬上就會刪除,當a.length的時候,不管如何創建如何刪除,它本來的值就是6是不變的。但是a.t確不一樣,它是不存在的,你第一次賦值給a.t的時候創建了臨時對象,但是調用完馬上刪除, 這個時候你在去訪問a.t的值, 又建立了一個新的臨時對象,肯定值是沒有定義過的。
length是一直存在,而t是不存在的。