JavaScript字串不是物件,為什麼會有屬性呢?(理解JavaScript中的包裝物件)
阿新 • • 發佈:2019-02-02
例項1:
var s = "hello javascript!"; //定義一個字串
var world = s.substring(s.indexOf(" ")+1, s.length); //使用字串的方法
例項2:
var s=""test"; //建立一個字串
s.len=4; //給字串設定一個屬性
var t=s.len; //查詢這個屬性
結果:
在例項1中,可以正常使用s的屬性length,在例項2中t的值為undefined
結論:
字串s是一個原始值,在例項1中,當訪問字串s的屬性時,訪問過程處於一種讀取模式,也就是要從記憶體中讀取這個字串的值。而在讀取模式中訪問字串是,後臺都會自動完成以下處理:
(1)建立String型別的一個例項;
(2)在例項上呼叫指定的方法;
(3)銷燬這個例項。
例項2中,第二行程式碼建立的是一個臨時字串物件,並給len屬性賦值為4,隨即銷燬這個物件,所以第三行t的值是未定義。
以上的這個“臨時物件”被稱為“包裝物件”
可以通過String(),Number(),Boolean()建構函式來顯示地建立包裝物件。但是通常情況下不建議這麼做。
對包裝物件的例項呼叫typeof會返回“object”,而且所有包裝物件都會轉換為布林值true。
例:
var falseObject=new Boolean(false);
var result=falseObject && true;
alert(result);//true;
var falseValue=false;
result=falseValue && true;
alert(result);
alert(typeof falseObject);//object
alert(typeof falseValue);//boolean
alert(falseObject instanceof Boolean);//true
alert(falseValue instanceof Boolean);//false
另外,“==”運算子將原始值和其包裝物件視為相等,“===”全等運算子則視為不等。