js基礎之物件和包裝類

2021-09-11 06:20:16 字數 1553 閱讀 7225

在講解包裝類之前我們先看乙個現象:

var str = "好好學習,天天向上";

console.log(str.length); //9

上述例子,會輸出字串的長度為9。眾所週時,字串屬於原始型別的資料,原始資料型別是沒有屬性和方法的,所以,字串型別資料中的length是**來的呢?

這就涉及到了我們今天要講到的包裝類了,除了字串型別還有數字型別,布林型別的資料在呼叫屬性和方法時都會首先經過包裝類包裝成物件的形式再呼叫該呼叫的屬性和方法。

這樣說可能還不太明白,沒關係,我們從頭開始講。要明白包裝類就要從物件開始講起。

這裡假設你已經具備了物件導向程式設計的基本功,(這裡我們並不打算詳細講解物件的一些定義和使用方法,而是通過物件引出包裝類的由來),js中物件的定義方法一般有兩種

(1)物件字面量,類似這樣:

var person =

(2)建構函式,而構造又可以分為兩種,一種是自定義的建構函式,另一種就是系統自帶的建構函式。

系統自帶的建構函式有:object, array, number, string, boolean, math, date, regexp, error等

通過new object()就可以建立乙個空物件。

我們仔細觀察這些系統自帶的建構函式就可以發現number,string,boolean這些原始值型別也可以建立物件。

var num = new number(123);  //建立乙個數字物件,這時num就不再是乙個單純的數字了,而是以乙個物件的形式存在,可以有方法和屬性

var str = new string("abc") //建立乙個字串物件

var boolean = new boolean(123) //建立乙個布林值物件

由於這些系統自定義的建構函式的存在,就導致了我們剛才提到的有趣的現象。

回到剛才我們提到的現象

var str = "好好學習,天天向上";

console.log(str.length); //9

當讀到str.length這句**時,系統會發現這句**理論上來說並不正確,但是系統內部會隱式的呼叫new string(「好好學習,天天向上」).length。而通過呼叫new string(「好好學習,天天向上」)就建立了乙個物件,這個物件身上是有length方法的。因此就可以輸出字串的長度。

還有值得注意的一點就是系統內部隱式建立好物件並呼叫了相關方法後會立馬銷毀物件

我們再看乙個例子:

var str = "abc";

str.length = 2;

console.log(str); //"abc"

console.log(str.length); //3

分析: 在執行第二句時,系統內部實際是在執行new string(「abc」).length = 2.但是執行完後就會立馬將物件銷毀,因此對str本身並沒有產生什麼影響。最後一句仍然是再行new string(「abc」).length,這時就會輸出3.

JS包裝物件

js中有三個基本資料型別是比較特殊的存在,分別是string number boolear,這個三個基本是由自己對應的包裝物件。並且隨時等候召喚,包裝物件 其實就是物件,有相應的屬性和方法,至於這個過程怎麼發生的呢?其是在後台偷偷發生的。區別 引用型別和基本包裝物件的區別在於,生存期,引用型別所建立...

java 基礎 之 包裝類

jdk 1.5 之後提供了自動裝箱與拆箱的功能 自動拆箱 除了自動裝箱與自動拆箱以外.包裝類還可以與string 進行相互轉換 jdk 1.7 版本之後又給所有的包裝類新增了乙個 compare 方法.用於比較兩個引數的大小 jdk 17 除了compare之外,還給character 增加了大量的...

物件,包裝類

物件的增刪改查 物件的建立方法 1 var obj plainobject 物件字面量 物件直接量 2 建構函式 1 系統自帶的建構函式 new object 2 自定義 var obj new object a,b,c obj.屬性 屬性值 可以改變新物件裡面的內容。建構函式 寫法和函式相同,要符...