2020-09-18 JavaScript對象

一、JavaScript對象

? ?? 1、對象的認識

??????? JavaScript 中的所有事物都是對象:字符串、數(shù)字、數(shù)組、日期,等等。在JavaScript 中,對象是擁有屬性和方法的數(shù)據(jù)。

??????? 通常對象是由一對或者多對屬性(包含屬性名和屬性值)組成的集合,屬性名也叫做鍵名,屬性值也叫做鍵值,所以對象的屬性也可以稱為鍵值對。

????????????? 對象:一組屬性的結(jié)合。

?????? ? ? ?? 屬性:與對象相關(guān)的值。

????????????? 方法:能夠在對象上執(zhí)行的動作。

? ? ? 2、對象的創(chuàng)建 ? ? ? ?? ? ? ? ????????

????????????? (1)字面量的方式創(chuàng)建對象:

(1)

??????????? 注:{} 是對象的界定符,就是對象的字面量。

?????????????????? 用 “.” 點操作符或者[ ]中括號法來獲得一個對象的屬性。對象屬性的訪問與使用中,點語法是有局限的,他只能訪問符合標識符規(guī)范的屬性。

?????? (2)判斷對象的界定符{}

??????????????? 在語句上下文出現(xiàn) {}?是代碼塊(多條語句的集合), 不是對象。例如:條件循環(huán)判斷語句。

??????????????? 在表達式上下文出現(xiàn)的 {}?才是對象的界定符,才表示一個對象。

?????? (3)對象的屬性

??????????????? 對象的屬性名是字符串類型。

??????????????? 對象的屬性名不是標識符,所以不用遵循標識符的命名規(guī)范。

??????????????? 注意:

???????????????????????? 1.?如果屬性名符合標識符規(guī)范可以不加引號。

???????????????????????? 2.如果屬性名不符合標識符規(guī)范或者是一些關(guān)鍵字,保留字必須加引號。

???????????????????????? 3.特殊的情況下, 屬性必須加引號,如:屬性為特殊字符、數(shù)字,屬性中有空格或關(guān)鍵字、保留字。

????? (4)屬性的不同調(diào)用方式

?????????????? 獲取對象的一個屬性值方法:(對象.屬性名)。

?????????????? 獲取不符合標識符規(guī)范的屬性值,使用中括號語法,?中括號放字符串:(對象["屬性名"]),

?????????????? 中括號內(nèi)的屬性必須加引號,?如果不加引號則表示一個變量。

????? (5)對象同名屬性覆蓋:

?????????????? 修改屬性值:對象.屬性名 = "新的屬性值"。最后打印出的對象同名屬性被覆蓋了新的屬性值。注:對象的屬性名不能重復,如果重復,后加的屬性值覆蓋之前同名的屬性值。

????? (6)如果對象屬性不是字符串會隱式轉(zhuǎn)為字符串。

???????? 注:對象的屬性值可以為任意類型。比如數(shù)字、字符串、布爾值、正則表達式、對象、數(shù)組、函數(shù)……

???? ? (7)?對象的方法:能夠在對象上執(zhí)行的動作。

???????????????? 例如:當對象的屬性的值是一個函數(shù)的時候,我們稱這個函數(shù)是對象的方法。

?????? (8)對象的常用操作:


??????????????? (9)對象的遍歷

?????????????????????????? for...in?循環(huán)遍歷對象:

????????????? (10)構(gòu)造函數(shù)創(chuàng)建對象

????????????????????????? 內(nèi)置的構(gòu)造函數(shù):Number 、String、Boolean、Object、Function、Array。

????????????????????????? new是一個運算符,和+-*/一樣是一個運算符。表示新創(chuàng)建一個對象。

????????????????????????? 例:js提供了一個內(nèi)置的構(gòu)造函數(shù)Object用來創(chuàng)建對象:var?obj?=?new?Object()。

????????????????????????? 注意:構(gòu)造函數(shù)創(chuàng)建對象一定要使用new?操作符。

????????????? 構(gòu)造函數(shù)內(nèi)部原理:構(gòu)造函數(shù)必須加new操作符,原本他只是一個普通的函數(shù),加new就能產(chǎn)生構(gòu)造函數(shù)的功能,構(gòu)造函數(shù)的功能就是創(chuàng)建對象。

????????????? 普通函數(shù)一旦使用new操作符,函數(shù)內(nèi)部將會隱式執(zhí)行三步:

???????????????????? 1.在函數(shù)內(nèi)部創(chuàng)建一個變量this,值為空對象:var this = {};

???????????????????? 2.執(zhí)行函數(shù)體中的代碼;

???????????????????? 3.返回this對象。

???????????????????? 構(gòu)造函數(shù)和普通函數(shù)的區(qū)別:

??????????????????????????? 1.普通函數(shù)是正常調(diào)用,?構(gòu)造函數(shù)是通過new操作符來創(chuàng)建對象。

??????????????????????????? 2.構(gòu)造函數(shù)是普通函數(shù)的一類,自定義的構(gòu)造函數(shù)遵循大駝峰式命名規(guī)則 Person TheFirstName。

??????????????????????????? 3.普通函數(shù)默認返回undefined,?但是我們可以通過顯示的return關(guān)鍵字來替換函數(shù)返回內(nèi)容。構(gòu)造函數(shù)默認返回對象,明確返回基本數(shù)據(jù)類型的值則無效。構(gòu)造函數(shù)就是用來創(chuàng)建對象的,?所以構(gòu)造函數(shù)內(nèi)必須返回一個對象。如果明確使用return?返回對象,那么將會替換默認返回的對象。

???? 注:構(gòu)造函數(shù)可以返回的引用數(shù)據(jù)類型有:Array數(shù)組、Object對象;引用類型:Function函數(shù)。

??????????? 4.構(gòu)造函數(shù)可以通過參數(shù)來動態(tài)改變對象的屬性值。

二、Object 類型

??????? ?多數(shù)引?類型值都是Object類型的實例;?且Object也是ECMAScript中使?最多的?個類型。雖然Object的實例不具備多少功能,但對于在應(yīng)?程序中存儲和傳輸數(shù)據(jù)??,是?常理想的選擇。

?????? 創(chuàng)建Object實例的?式有兩種。第?種是使?new操作符后跟Object構(gòu)造函數(shù):

?????? 另?種?式是使?對象字?量表?法。對象字?量是對象定義的?種簡寫形式,?的在于簡化創(chuàng)建包含?量屬性的對象的過程。下?這個例?就使?了對象字?量語法定義了與前?那個例?中相同的person對象:

三、基本包裝類型

?????????? 為了便于操作基本類型值,ECMAScript還提供了3個特殊的引?類型:Boolean、Number和String。這些類型與其他引?類型相似,但同時也具有與各?的基本類型相應(yīng)的特殊?為。實際上,每當讀取?個基本類型值的時候,后臺就會創(chuàng)建?個對應(yīng)的基本包裝類型的對象,從?讓我們能夠調(diào)??些?法來操作這些數(shù)據(jù)。

?????????? 1.?只有對象才有屬性和方法,?基本數(shù)據(jù)類型是沒有屬性和方法的。

?????????? 2.?如果給基本數(shù)據(jù)類型的數(shù)據(jù)添加屬性會調(diào)用包裝類,?沒有包裝類就報錯。

?????????? 3. 數(shù)字、字符串、布爾值的包裝類:

??????????????? 4.undefined null 沒有包裝類

??????????????? 5.js沒有類的概念,?其他語言中類是用來創(chuàng)建對象的,?所以js里常把構(gòu)造函數(shù)叫做類,通過構(gòu)造函數(shù)包裝成為一個對象。

??????????????? 6.包裝類的作用:把不能設(shè)置和獲取屬性的基本數(shù)據(jù)類型包裝成為一個對象。

??????? 引?類型與基本包裝類型的主要區(qū)別就是對象的?存期。使?new操作符創(chuàng)建的引?類型的實例,在執(zhí)?流離開當前作?域之前都?直保存在內(nèi)存中。??動創(chuàng)建的基本包裝類型的對象,則只存在于??代碼的執(zhí)?瞬間,然后?即被銷毀。這意味著我們不能在運?時為基本類型值添加屬性和?法。

四、JSON

?????????? JSON(JavaScriptObject Notation) 是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于語言的文本格式,是理想的數(shù)據(jù)交換格式。同時,JSON是JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的 API 或工具包。在JSON中,有兩種結(jié)構(gòu):對象和數(shù)組。

?????????? 1、對象:

???????????????????????? var?json?= {"name":"伊冰","age":?18};

???????????????? 一個對象以'{"開始,"}'結(jié)束,“key/value”之間運用 “,”分隔。

?????????? 2、數(shù)組:

???????????????????????? var?Json?= [{"name"?:?"伊冰",?"age"?:?18},?{"name"?:?"慜益學",?"age"?:?22}];

??????????????? 數(shù)組是值的有序集合。一個數(shù)組以“[”開始,“]”結(jié)束。值之間運用 “,”分隔。

???????? ? 注:JSON是對象格式的字符串,屬性名必須加引號,并且JSON內(nèi)的引號必須是雙引號。

?????????? 3、JSON的方式

????????? (1)stringify() ? ?? //? 把對象轉(zhuǎn)為JSON

????????? (2)parse() ? ? ? ? // ?把JSON轉(zhuǎn)為對象

?????????? 注:在數(shù)據(jù)傳輸過程中,JSON是以字符串的形式傳遞的,而JS操作的是JSON對象,所以,JSON對象和JSON字符串之間的相互轉(zhuǎn)換要注意在最外層的{}或[]外加上單引號。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容