成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript學(xué)習(xí)總結(jié)(二)數(shù)組和對象部分

Lsnsh / 3345人閱讀

摘要:屬性是一個值或一組值以數(shù)組或?qū)ο蟮男问剑菍ο蟮某蓡T??梢允褂脙?nèi)置構(gòu)造函數(shù)和創(chuàng)建包裝對象。因此下面的代碼將會使人很迷惑結(jié)果結(jié)果,此數(shù)組長度為應(yīng)該盡量避免使用數(shù)組構(gòu)造函數(shù)創(chuàng)建新數(shù)組。給數(shù)組對象添加返回數(shù)組中最大元素值的方法。

對象部分 Object類型

Object 是一個無序的集合,可以存放任意類型對象,所有其他對象都繼承自這個對象。
創(chuàng)建Object類型有兩種,一種是使用new運算符,一種是字面量表示法。

1.使用new運算符創(chuàng)建Object

var obj = new Object();//注意大寫,也可以直接寫成Object()

注意,通過new Object() 的寫法生成新對象,與字面量的寫法 obj = {} 是等價的。

2. 使用字面量方式創(chuàng)建:

var obj = {
    name : "trigkit4",
    age : 21
};//分號最好加上

在使用字面量聲明Object對象時,不會調(diào)用Object()構(gòu)造函數(shù)(FF除外)

Object.prototype對象

所有構(gòu)造函數(shù)都有一個prototype屬性,指向一個原型對象。

Object.prototype.print = function(){ console.log(this)};

var obj = new Object();

obj.print() // Object

實例obj直接繼承了Object.prototype的屬性和方法

1.對象只是一種特殊的數(shù)據(jù)。對象擁有屬性和方法。 JavaScript 是面向?qū)ο蟮恼Z言,但 JavaScript 不使用類。 JavaScript 基于 [prototype][1],而不是基于類的。

2.屬性:是隸屬于某個特定對象的變量。方法:是只有某個特定對象才能調(diào)用的函數(shù)。

3.js對象是屬性和方法的集合。一個方法就是一個函數(shù),是對象的成員。屬性是一個值或一組值(以數(shù)組或?qū)ο蟮男问剑?,是對象的成員。

4.js對象是基于構(gòu)造器函數(shù)的,使用構(gòu)造器函數(shù)創(chuàng)建一個新對象時,就可以說是實例化了一個新對象。屬性是構(gòu)造器函數(shù)內(nèi)部的變量。

使用構(gòu)造器函數(shù)實例化的對象:

cat = new Animal();

Javascript是一種基于對象(object-based)的語言,你遇到的所有東西幾乎都是對象。但是,它又不是一種真正的面向?qū)ο缶幊蹋∣OP)語言,因為它的語法中沒有class(類)。



 //通過點號(.)或“[]”來訪問對象的屬性
    browser.name         //"Firefox"
    browser["kernel"]    //"Gecko"

對象(objct)是屬性(property)的集合,每個屬性都由“名/值對”構(gòu)成,js同樣定義了一個特殊的對象——數(shù)組,它是帶有編號的值的有序集合。

js還定義了一個特殊的對象——函數(shù),函數(shù)是具有與他相關(guān)聯(lián)的可執(zhí)行代碼的對象,通過調(diào)用函數(shù)來執(zhí)行代碼,并返回運算結(jié)果。

JS中沒有[類]3,但是它取了一個新的名字叫“原型對象”,因此"類==原型對象",詳情見:JavaScript類的寫法(一)

二:類(原型對象)和對象(實例)的區(qū)別與聯(lián)系
1.類(原型對象)是抽象,是概念的,代表一類事物。
2.對象是具體的,實際的,代表一個具體的事物。
3.類(原型對象)是對象實例的模板,對象實例是類的一個個體。

一個常見的誤解是數(shù)字的字面值(literal)不是對象。這是因為 JavaScript 解析器的一個錯誤,它試圖將點操作符解析為浮點數(shù)字面值的一部分。

有很多變通方法可以讓數(shù)字的字面值看起來像對象。

2..toString(); // 第二個點號可以正常解析
2 .toString(); // 注意點號前面的空格
(2).toString(); // 2先被計算

刪除屬性

刪除屬性的唯一方法是使用 delete 操作符;設(shè)置屬性為 undefined 或者 null 并不能真正的刪除屬性,而僅僅是移除了屬性和值的關(guān)聯(lián)。

JavaScript面向?qū)ο笕筇卣?/b>
封裝:不考慮內(nèi)部實現(xiàn),只考慮功能使用
繼承:從已有對象上,繼承出新的對象
多態(tài):所謂多態(tài),就是指一個引用在不同情況下的多種狀態(tài),

1.封裝

封裝就是要把屬于同一類事物的共性(包括屬性與行為)歸到一個類中,以方便使用.比如人這個東東,可用下面的方式封裝:

人{

年齡(屬性一)
身高(屬性二)
性別(屬性三)

做事(行為之一)
走路(行為之二)
說話(行為之三)

}

封裝的好處:

封裝保護了內(nèi)部數(shù)據(jù)的完整性;
封裝使對象的重構(gòu)更輕松;
弱化模塊間的耦合,提高對象的可重用性;
有助于避免命名空間沖突;

看下面一個例子:

 

這就是最簡單的封裝了,把兩個屬性封裝在一個對象里面。但是,這樣的寫法有兩個缺點,一是如果多生成幾個實例,寫起來就非常麻煩;二是實例與原型之間,沒有任何辦法,可以看出有什么聯(lián)系。

構(gòu)造函數(shù)模式

為了解決從原型對象生成實例的問題,Javascript提供了一個構(gòu)造函數(shù)(Constructor)模式。

所謂"構(gòu)造函數(shù)",其實就是一個普通函數(shù),但是內(nèi)部使用了this變量。對構(gòu)造函數(shù)使用new運算符,就能生成實例,并且this變量會綁定在實例對象上。

比如boygirl的原型對象現(xiàn)在就可以這樣寫:

我們現(xiàn)在就可以生成實例對象了。

這時boygirl會自動含有一個constructor屬性,指向它們的構(gòu)造函數(shù)。
 

alert(boy.constructor == Person); //true

alert(girl.constructor); //輸出整串構(gòu)造函數(shù)代碼,自己試試吧

Prototype模式 Javascript規(guī)定,每一個構(gòu)造函數(shù)都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構(gòu)造函數(shù)的實例繼承。

這意味著,我們可以把那些不變的屬性和方法,直接定義在prototype對象上。


然后,生成實例:


這時所有實例的type屬性和eat()方法,其實都是同一個內(nèi)存地址,指向prototype對象,因此就提高了運行效率。

alert(boy.eat == girl.eat); //true 

原型屬性是一個內(nèi)置屬性,它指定了對象所擴展的構(gòu)造器函數(shù)。
下面的代碼為Animal構(gòu)造器函數(shù)添加一個新的屬性size,這個新屬性是cat對象的原型屬性。通過使用原型屬性,所有擴展Animal構(gòu)造器函數(shù)的對象就可以訪問size屬性

cat = new Animal("feline","meow", "walk/run");
cat.prototype.size = "fat"; 

在這種情況下,所有的Animal對象的size屬性都是“fat”。原型默認為Object的新實例, 由于仍是對象, 故可以給該對象添加新的屬性。就好像stylejavascript的一個對象一樣,也可以往style后繼續(xù)添加屬性。

  

對象在查找某個屬性的時候,會首先遍歷自身的屬性,如果沒有則會繼續(xù)查找[[Prototype]]引用的對象,如果再沒有則繼續(xù)查找[[Prototype]].[[Prototype]]引用的對象,依次類推,直到[[Prototype]].….[[Prototype]]undefinedObject[[Prototype]]就是undefined

簡單說就是通過對象的[[Prototype]]保存對另一個對象的引用,通過這個引用往上進行屬性的查找,這就是原型鏈。

null 對象

js給變量賦null值的作用在于:
賦值一個空指針,容易讓人理解這個變量是準(zhǔn)備用來存放對象的。也方便調(diào)錯

全局的window對象

JavaScript中的任何一個全局函數(shù)或變量都是window的屬性。
self對象與window對象完全相同,self通常用于確認就是在當(dāng)前的窗體內(nèi)。

 window的主對象主要有如下幾個:

JavaScript document 對象
JavaScript frames 對象
JavaScript history 對象
JavaScript location 對象
JavaScript navigator 對象
JavaScript screen 對象




幾個常用方法
valueof()方法:返回指定對象的原始值
split() 方法將字符串分割為字符串?dāng)?shù)組,并返回此數(shù)組。
indexOf() 方法可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置。    
substring() 方法用于提取字符串中介于兩個指定下標(biāo)之間的字符。
substr() 方法從字符串中提取從 startPos位置開始的指定數(shù)目的字符串。    
join()方法用于把數(shù)組中的所有元素放入一個字符串。
arrayObject.join(分隔符)
reverse() 方法用于顛倒數(shù)組中元素的順序。    
slice() 方法可從已有的數(shù)組中返回選定的元素。


對象字面量

對象字面量是用于創(chuàng)建包含大量屬性的過程,如下所示:


這里需要注意的是屬性和屬性值以冒號(:)隔開;多個屬性用逗號(,)隔開。對象字面量亦可以定義方法,只需在這個對象的屬性上寫上function就行,這是一個匿名函數(shù),調(diào)用它只需要寫上他的方法名()即可。


基本值類型包裝器

js有五種基本的值類型:number、string、Boolean、null和undefined。除了null和undefined外,其他三個都具有所謂的基本包裝對象??梢允褂脙?nèi)置構(gòu)造函數(shù)Number()、String()Boolean()創(chuàng)建包裝對象。

var num = new Number(10);
console.log(typeof num);//object

Object()方法
Object() // 返回一個空對象
Object(undefined) // 返回一個空對象
Object(null) // 返回一個空對象

Object(1) // 等同于 new Number(1)
Object("foo") // 等同于 new String("foo")
Object(true) // 等同于 new Boolean(true)

Object([]) // 返回原數(shù)組
Object({}) // 返回原對象
Object(function(){}) // 返回原函數(shù)
數(shù)組部分 1.Array 對象

Array 對象:提供對創(chuàng)建任何數(shù)據(jù)類型的數(shù)組的支持。

arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])

定義:var arr = [2,3,45,6]; var arr = new Array(2,4,5,7)
兩者是定義沒有任何差別,[]的性能高,因為代碼短。

使用數(shù)組和對象字面量:var aTest = [];創(chuàng)建數(shù)組時,使用數(shù)組字面量是個好選擇;類似的,對象字面量也可用于節(jié)省空間。以下兩行是相等的,但是使用對象字面量的更加簡短:

      
 var oTest = new Object;  //盡量不用
 var oTest = { };    //最好的選擇,或者var 0Test = [ ];

遍歷為了達到遍歷數(shù)組的最佳性能,推薦使用經(jīng)典的 for 循環(huán)。

var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
    console.log(list[i]);
}

上面代碼有一個處理,就是通過 l = list.length 來緩存數(shù)組的長度。

Array 構(gòu)造函數(shù)

由于 Array 的構(gòu)造函數(shù)在如何處理參數(shù)時有點模棱兩可,因此總是推薦使用數(shù)組的字面語法 - [] - 來創(chuàng)建數(shù)組。

因此下面的代碼將會使人很迷惑:

new Array(3, 4, 5); // 結(jié)果: [3, 4, 5] 
new Array(3) // 結(jié)果: [],此數(shù)組長度為 3

應(yīng)該盡量避免使用數(shù)組構(gòu)造函數(shù)創(chuàng)建新數(shù)組。推薦使用數(shù)組的字面語法。它們更加短小和簡潔,因此增加了代碼的可讀性。

Array數(shù)組的屬性

Array數(shù)組的3個屬性:length屬性、prototype屬性、constructor屬性

1.length屬性

Length屬性表示數(shù)組的長度,即其中元素的個數(shù)。因為數(shù)組的索引總是由0開始,所以一個數(shù)組的上下限分別是:0和length-1。和其他大多數(shù)語言不同的是,JavaScript數(shù)組的length屬性是可變的,這一點需要特別注意。

2.prototype屬性

返回對象類型原型的引用。prototype屬性是object共有的。

對于Array數(shù)組對象,以以下例子說明prototype屬性的用途。
給數(shù)組對象添加返回數(shù)組中最大元素值的方法。要完成這一點,聲明一個函數(shù),將它加入Array.prototype,并使用它。

function array_max()  
{  
var i,max=this[0];  
for(i=1;i

該代碼執(zhí)行后,y保存數(shù)組x中的最大值,或說6。

3.constructor屬性

表示創(chuàng)建對象的函數(shù)。說明:constructor屬性是所有具有prototype的對象的成員。它們包括除GlobalMath對象以外的所有JScript固有對象。constructor屬性保存了對構(gòu)造特定對象實例的函數(shù)的引用。

例如:

x = new String("Hi");  
if(x.constructor==String) //進行處理(條件為真)。  
//或  
function MyFunc{  
//函數(shù)體。  
}  
 
y=new MyFunc;  
if(y.constructor==MyFunc)//進行處理(條件為真)。

對于數(shù)組來說:

y = new Array(); 

Array 對象方法
方法 描述
concat() 連接兩個或更多的數(shù)組,并返回結(jié)果。
join() 把數(shù)組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。
pop() 刪除并返回數(shù)組的最后一個元素
push() 向數(shù)組的末尾添加一個或更多元素,并返回新的長度。
reverse() 顛倒數(shù)組中元素的順序。
shift() 刪除并返回數(shù)組的第一個元素
slice() 從某個已有的數(shù)組返回選定的元素
sort() 對數(shù)組的元素進行排序
splice() 刪除元素,并向數(shù)組添加新元素。
toSource() 返回該對象的源代碼。
toString() 把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果。
toLocaleString() 把數(shù)組轉(zhuǎn)換為本地數(shù)組,并返回結(jié)果。
unshift() 向數(shù)組的開頭添加一個或更多元素,并返回新的長度。
valueOf() 返回數(shù)組對象的原始值
sort()方法

語法

arrayObject.sort(sortby)

sortby可選。規(guī)定排序順序。必須是函數(shù)。

var arr = [11,2,28,4,5,1];
console.log(arr.sort());//return  [1, 11, 2, 28, 4, 5]

為毛這里的11、28沒有按照順序來排列呢?這是因為不帶參數(shù)的sort是按照字符編碼的順序進行排序的。
那么,如果要讓數(shù)組元素按照從小到大排序呢?看下面代碼:

var arr = [11,2,28,4,5,1];
    console.log(arr.sort(function(a,b){
        return a-b;//return  [1, 2, 4, 5, 11, 28]
    })); 

如果想按照其他標(biāo)準(zhǔn)進行排序,就需要提供比較函數(shù),該函數(shù)要比較兩個值,然后返回一個用于說明這兩個值的相對順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個參數(shù) a 和 b,其返回值如下:

若 a 小于 b,在排序后的數(shù)組中 a 應(yīng)該出現(xiàn)在 b 之前,則返回一個小于 0 的值。
若 a 等于 b,則返回 0。
若 a 大于 b,則返回一個大于 0 的值。





附上一張數(shù)組的思維導(dǎo)圖:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87611.html

相關(guān)文章

  • JavaScript學(xué)習(xí)總結(jié)(六)數(shù)據(jù)類型JSON格式

    摘要:并列數(shù)據(jù)的集合數(shù)組用方括號表示。第三種類型是映射,也就是一個名值對,即數(shù)據(jù)有一個名稱,還有一個與之相對應(yīng)的值,這又稱作散列或字典,比如首都北京。中有種簡單數(shù)據(jù)類型也稱為基本數(shù)據(jù)類型和。數(shù)值布爾值對象和字符串值都有方法。 什么是JSON JSON:JavaScript 對象表示法(JavaScript Object Notation)。 JSON的形式是用大括號{}包圍起來的項目列表...

    laznrbfe 評論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(一)基礎(chǔ)部分

    摘要:前綴規(guī)范每個局部變量都需要有一個類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時,在同一個作用域內(nèi)是先解釋再執(zhí)行。解釋的時候會編譯function和var這兩個關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評論0 收藏0

發(fā)表評論

0條評論

Lsnsh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<