摘要:屬性是一個值或一組值以數組或對象的形式,是對象的成員。可以使用內置構造函數和創建包裝對象。因此下面的代碼將會使人很迷惑結果結果,此數組長度為應該盡量避免使用數組構造函數創建新數組。給數組對象添加返回數組中最大元素值的方法。
對象部分 Object類型
Object 是一個無序的集合,可以存放任意類型對象,所有其他對象都繼承自這個對象。
創建Object類型有兩種,一種是使用new運算符,一種是字面量表示法。
1.使用new運算符創建Object
var obj = new Object();//注意大寫,也可以直接寫成Object()
注意,通過new Object() 的寫法生成新對象,與字面量的寫法 obj = {} 是等價的。
2. 使用字面量方式創建:
var obj = { name : "trigkit4", age : 21 };//分號最好加上
在使用字面量聲明Object對象時,不會調用Object()構造函數(FF除外)
Object.prototype對象所有構造函數都有一個prototype屬性,指向一個原型對象。
Object.prototype.print = function(){ console.log(this)}; var obj = new Object(); obj.print() // Object
實例obj直接繼承了Object.prototype的屬性和方法
1.對象只是一種特殊的數據。對象擁有屬性和方法。 JavaScript 是面向對象的語言,但 JavaScript 不使用類。 JavaScript 基于 [prototype][1],而不是基于類的。 2.屬性:是隸屬于某個特定對象的變量。方法:是只有某個特定對象才能調用的函數。 3.js對象是屬性和方法的集合。一個方法就是一個函數,是對象的成員。屬性是一個值或一組值(以數組或對象的形式),是對象的成員。 4.js對象是基于構造器函數的,使用構造器函數創建一個新對象時,就可以說是實例化了一個新對象。屬性是構造器函數內部的變量。
使用構造器函數實例化的對象:
cat = new Animal();
Javascript是一種基于對象(object-based)的語言,你遇到的所有東西幾乎都是對象。但是,它又不是一種真正的面向對象編程(OOP)語言,因為它的語法中沒有class(類)。
//通過點號(.)或“[]”來訪問對象的屬性 browser.name //"Firefox" browser["kernel"] //"Gecko"
對象(objct)是屬性(property)的集合,每個屬性都由“名/值對”構成,js同樣定義了一個特殊的對象——數組,它是帶有編號的值的有序集合。
js還定義了一個特殊的對象——函數,函數是具有與他相關聯的可執行代碼的對象,通過調用函數來執行代碼,并返回運算結果。
JS中沒有[類]3,但是它取了一個新的名字叫“原型對象”,因此"類==原型對象",詳情見:JavaScript類的寫法(一)
二:類(原型對象)和對象(實例)的區別與聯系1.類(原型對象)是抽象,是概念的,代表一類事物。 2.對象是具體的,實際的,代表一個具體的事物。 3.類(原型對象)是對象實例的模板,對象實例是類的一個個體。
一個常見的誤解是數字的字面值(literal)不是對象。這是因為 JavaScript 解析器的一個錯誤,它試圖將點操作符解析為浮點數字面值的一部分。
有很多變通方法可以讓數字的字面值看起來像對象。
2..toString(); // 第二個點號可以正常解析 2 .toString(); // 注意點號前面的空格 (2).toString(); // 2先被計算刪除屬性
刪除屬性的唯一方法是使用 delete 操作符;設置屬性為 undefined 或者 null 并不能真正的刪除屬性,而僅僅是移除了屬性和值的關聯。
JavaScript面向對象三大特征封裝:不考慮內部實現,只考慮功能使用 繼承:從已有對象上,繼承出新的對象 多態:所謂多態,就是指一個引用在不同情況下的多種狀態,1.封裝
封裝就是要把屬于同一類事物的共性(包括屬性與行為)歸到一個類中,以方便使用.比如人這個東東,可用下面的方式封裝:
人{
年齡(屬性一) 身高(屬性二) 性別(屬性三) 做事(行為之一) 走路(行為之二) 說話(行為之三)
}
封裝的好處:
封裝保護了內部數據的完整性; 封裝使對象的重構更輕松; 弱化模塊間的耦合,提高對象的可重用性; 有助于避免命名空間沖突;
看下面一個例子:
這就是最簡單的封裝了,把兩個屬性封裝在一個對象里面。但是,這樣的寫法有兩個缺點,一是如果多生成幾個實例,寫起來就非常麻煩;二是實例與原型之間,沒有任何辦法,可以看出有什么聯系。
構造函數模式為了解決從原型對象生成實例的問題,Javascript提供了一個構造函數(Constructor)模式。
所謂"構造函數",其實就是一個普通函數,但是內部使用了this變量。對構造函數使用new運算符,就能生成實例,并且this變量會綁定在實例對象上。
比如boy和girl的原型對象現在就可以這樣寫:
我們現在就可以生成實例對象了。
這時boy和girl會自動含有一個constructor屬性,指向它們的構造函數。
alert(boy.constructor == Person); //true alert(girl.constructor); //輸出整串構造函數代碼,自己試試吧
Prototype模式 Javascript規定,每一個構造函數都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構造函數的實例繼承。
這意味著,我們可以把那些不變的屬性和方法,直接定義在prototype對象上。
然后,生成實例:
這時所有實例的type屬性和eat()方法,其實都是同一個內存地址,指向prototype對象,因此就提高了運行效率。
alert(boy.eat == girl.eat); //true
原型屬性是一個內置屬性,它指定了對象所擴展的構造器函數。
下面的代碼為Animal構造器函數添加一個新的屬性size,這個新屬性是cat對象的原型屬性。通過使用原型屬性,所有擴展Animal構造器函數的對象就可以訪問size屬性
cat = new Animal("feline","meow", "walk/run"); cat.prototype.size = "fat";
在這種情況下,所有的Animal對象的size屬性都是“fat”。原型默認為Object的新實例, 由于仍是對象, 故可以給該對象添加新的屬性。就好像style是javascript的一個對象一樣,也可以往style后繼續添加屬性。
對象在查找某個屬性的時候,會首先遍歷自身的屬性,如果沒有則會繼續查找[[Prototype]]引用的對象,如果再沒有則繼續查找[[Prototype]].[[Prototype]]引用的對象,依次類推,直到[[Prototype]].….[[Prototype]]為undefined(Object的[[Prototype]]就是undefined)
簡單說就是通過對象的[[Prototype]]保存對另一個對象的引用,通過這個引用往上進行屬性的查找,這就是原型鏈。
null 對象js給變量賦null值的作用在于:
賦值一個空指針,容易讓人理解這個變量是準備用來存放對象的。也方便調錯
JavaScript中的任何一個全局函數或變量都是window的屬性。
self對象與window對象完全相同,self通常用于確認就是在當前的窗體內。
window的主對象主要有如下幾個:
JavaScript document 對象 JavaScript frames 對象 JavaScript history 對象 JavaScript location 對象 JavaScript navigator 對象 JavaScript screen 對象幾個常用方法
valueof()方法:返回指定對象的原始值 split() 方法將字符串分割為字符串數組,并返回此數組。 indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置。 substring() 方法用于提取字符串中介于兩個指定下標之間的字符。 substr() 方法從字符串中提取從 startPos位置開始的指定數目的字符串。 join()方法用于把數組中的所有元素放入一個字符串。 arrayObject.join(分隔符) reverse() 方法用于顛倒數組中元素的順序。 slice() 方法可從已有的數組中返回選定的元素。對象字面量
對象字面量是用于創建包含大量屬性的過程,如下所示:
這里需要注意的是屬性和屬性值以冒號(:)隔開;多個屬性用逗號(,)隔開。對象字面量亦可以定義方法,只需在這個對象的屬性上寫上function就行,這是一個匿名函數,調用它只需要寫上他的方法名()即可。
基本值類型包裝器
js有五種基本的值類型:number、string、Boolean、null和undefined。除了null和undefined外,其他三個都具有所謂的基本包裝對象。可以使用內置構造函數Number()、String()和Boolean()創建包裝對象。
var num = new Number(10); console.log(typeof num);//objectObject()方法
Object() // 返回一個空對象 Object(undefined) // 返回一個空對象 Object(null) // 返回一個空對象 Object(1) // 等同于 new Number(1) Object("foo") // 等同于 new String("foo") Object(true) // 等同于 new Boolean(true) Object([]) // 返回原數組 Object({}) // 返回原對象 Object(function(){}) // 返回原函數數組部分 1.Array 對象
Array 對象:提供對創建任何數據類型的數組的支持。
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)
兩者是定義沒有任何差別,[]的性能高,因為代碼短。
使用數組和對象字面量:var aTest = [];創建數組時,使用數組字面量是個好選擇;類似的,對象字面量也可用于節省空間。以下兩行是相等的,但是使用對象字面量的更加簡短:
var oTest = new Object; //盡量不用 var oTest = { }; //最好的選擇,或者var 0Test = [ ];
遍歷為了達到遍歷數組的最佳性能,推薦使用經典的 for 循環。
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 來緩存數組的長度。
Array 構造函數由于 Array 的構造函數在如何處理參數時有點模棱兩可,因此總是推薦使用數組的字面語法 - [] - 來創建數組。
因此下面的代碼將會使人很迷惑:
new Array(3, 4, 5); // 結果: [3, 4, 5] new Array(3) // 結果: [],此數組長度為 3
應該盡量避免使用數組構造函數創建新數組。推薦使用數組的字面語法。它們更加短小和簡潔,因此增加了代碼的可讀性。
Array數組的屬性Array數組的3個屬性:length屬性、prototype屬性、constructor屬性
1.length屬性Length屬性表示數組的長度,即其中元素的個數。因為數組的索引總是由0開始,所以一個數組的上下限分別是:0和length-1。和其他大多數語言不同的是,JavaScript數組的length屬性是可變的,這一點需要特別注意。
2.prototype屬性返回對象類型原型的引用。prototype屬性是object共有的。
對于Array數組對象,以以下例子說明prototype屬性的用途。
給數組對象添加返回數組中最大元素值的方法。要完成這一點,聲明一個函數,將它加入Array.prototype,并使用它。
function array_max() { var i,max=this[0]; for(i=1;i該代碼執行后,y保存數組x中的最大值,或說6。
3.constructor屬性表示創建對象的函數。說明:constructor屬性是所有具有prototype的對象的成員。它們包括除Global和Math對象以外的所有JScript固有對象。constructor屬性保存了對構造特定對象實例的函數的引用。
例如:
x = new String("Hi"); if(x.constructor==String) //進行處理(條件為真)。 //或 function MyFunc{ //函數體。 } y=new MyFunc; if(y.constructor==MyFunc)//進行處理(條件為真)。對于數組來說:
y = new Array();Array 對象方法sort()方法
方法 描述 concat() 連接兩個或更多的數組,并返回結果。 join() 把數組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。 pop() 刪除并返回數組的最后一個元素 push() 向數組的末尾添加一個或更多元素,并返回新的長度。 reverse() 顛倒數組中元素的順序。 shift() 刪除并返回數組的第一個元素 slice() 從某個已有的數組返回選定的元素 sort() 對數組的元素進行排序 splice() 刪除元素,并向數組添加新元素。 toSource() 返回該對象的源代碼。 toString() 把數組轉換為字符串,并返回結果。 toLocaleString() 把數組轉換為本地數組,并返回結果。 unshift() 向數組的開頭添加一個或更多元素,并返回新的長度。 valueOf() 返回數組對象的原始值 語法
arrayObject.sort(sortby)sortby可選。規定排序順序。必須是函數。
var arr = [11,2,28,4,5,1]; console.log(arr.sort());//return [1, 11, 2, 28, 4, 5]為毛這里的11、28沒有按照順序來排列呢?這是因為不帶參數的sort是按照字符編碼的順序進行排序的。
那么,如果要讓數組元素按照從小到大排序呢?看下面代碼: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] }));如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然后返回一個用于說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
若 a 小于 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小于 0 的值。 若 a 等于 b,則返回 0。 若 a 大于 b,則返回一個大于 0 的值。附上一張數組的思維導圖:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87611.html
摘要:并列數據的集合數組用方括號表示。第三種類型是映射,也就是一個名值對,即數據有一個名稱,還有一個與之相對應的值,這又稱作散列或字典,比如首都北京。中有種簡單數據類型也稱為基本數據類型和。數值布爾值對象和字符串值都有方法。 什么是JSON JSON:JavaScript 對象表示法(JavaScript Object Notation)。 JSON的形式是用大括號{}包圍起來的項目列表...
摘要:前綴規范每個局部變量都需要有一個類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,是一種區分大小寫的語言。布爾值與字符串相加將布爾值強制轉換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當解釋器。js執行時,在同一個作用域內是先解釋再執行。解釋的時候會編譯function和var這兩個關鍵詞定義的變量,編譯完成后從...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 1664·2019-08-30 13:04
閱讀 2217·2019-08-30 12:59
閱讀 1777·2019-08-29 18:34
閱讀 1875·2019-08-29 17:31
閱讀 1268·2019-08-29 15:42
閱讀 3546·2019-08-29 15:37
閱讀 2868·2019-08-29 13:45
閱讀 2782·2019-08-26 13:57