亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js 中關于String對象的創建和銷毀,何時創建,何時銷毀

js 中關于String對象的創建和銷毀,何時創建,何時銷毀

胡子哥哥 2019-04-07 11:18:30
最近在看javascript權威指南,書上看到以下的代碼:vars='test';s.len=4;vart=s.len;console.log(t);這時候t報出undefined,為何?。?
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

vars='test';//s是`string`類型,不是`object`
s.len=4;//既然s不是object,怎么進行屬性操作呢?
這里其實就引申出了包裝對象的概念,你可以近似理解為這一步等同于下面幾步操作
var_tmp_var_s=newString(s);//_tmp_var_s是`object`類型,可通過typeof()驗證
_tmp_var_s.len=4;
delete_tmp_var_s;
vart=s.len;
同樣道理,s不是對象,沒有len屬性=>
var_tmp_var_s1=newString(s);
vart=_tmp_var_s1.len;//新創建的對象,可是沒這個屬性的,即undefined
delete_tmp_var_s1;
既然包裝對象用完就銷毀,沒啥實際意義,為啥還要存在?
這是因為原始數據類型string,number等是沒有屬性的,只有object才有屬性
為了為原始數據類型提供屬性操作,才引申出包裝對象這個概念
比如當我們取string類型變量的length屬性也是隱含了這一步操作
varstr='hello!';
varlen=str.length;
等效于
varlen=newString(str).length;
                            
查看完整回答
反對 回復 2019-04-07
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

找到答案了,vars='test'創建的只是一個字符串,而不是對象,所以s.len=4這時候賦值的對象屬性是臨時創建對象的屬性,創建完就直接銷毀了,到了vart=s.len時候就找不到這個屬性了,所以顯示是undefined。
                            
查看完整回答
反對 回復 2019-04-07
  • 2 回答
  • 0 關注
  • 606 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號