javascript為什麼字串直接量可以使用屬性和方法

antzone發表於2017-04-04

在分析標題中的問題之前先來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var str="softwhy.com";
console.log(str.length);

如果不深究,那麼上面的程式碼實在是太普通不過了,但是細緻看來,可能有不少朋友有這樣的疑問,那就是為什麼字串直接量可以使用屬性或者方法,不是隻有物件才可能嗎,下面就介紹一下其中的原理:

當字串直接量呼叫屬性或者方法的時候,javascript會隱式將字串直接量轉換為物件,也就相當於執行了如下操作:

[JavaScript] 純文字檢視 複製程式碼
var str="softwhy.com";
var str=new String(str)
console.log(str.length);

特別說明:隱式轉換建立的是一個臨時物件,一旦屬性或者方法引用結束,這個新建立的物件就會被銷燬(在javascript的內部具體是否真正建立了臨時物件或者銷燬臨時物件不得而知,這裡不深究了,從表現來看確實如此)。對於其他的布林值或者數字也是一樣的道理。再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var str="softwhy.com";
str.len=15;
console.log(str.len);

上面程式碼輸出是undefined,因為臨時物件在呼叫屬性之後就自動銷燬了。

程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
var str="softwhy.com";
var str=new String(str);
str.len=15;
console.log(str.len);

上面的程式碼沒有任何問題,因為這裡確確實實建立一個物件。

相關文章