javaScript引用類型詳解

概念 : 引用類型是一種數據結構,用於將數據和功能組織在一塊兒,也就是 類;
對象爲特殊的引用類型實例。新對象由new後加一個構造函數建立的。
構造函數:用於建立對象的函數。
例 : var person = new Object();
object爲構造函數,爲新對象提供默認屬性與方法。前端

一、object類型

//普通方法正則表達式

var person = new Object();
person.name = "syr";
person.age = 22;

//對象字面量算法

var person = {    
    name : "syr",    
    age : 22,    
    5 : true            //5自動轉爲"5"
}
* 數值屬性名會自動轉爲字符串;
* 對象字面量推薦只在屬性名可讀的狀況下使用,也是向函數傳遞大量參數首選方式,必須使用命名參數,對象字面量封裝多個可選參數。
* 訪問對象通常用點表示法,js中也能夠用方括號法,將要訪問的屬性以字符串的形式放進去。

例 : alert(person["name"]); // 等於 person.nameexpress

* 方括號法主要優勢是能夠經過變量來訪問屬性。
* 點表示法屬性名不能包含錯誤的自負或者保留字和關鍵字,但方括號法能夠。
* 一般,除非必須使用變量來訪問屬性,不然推薦使用點表示法。

二、Array類型:

* 數組:數據的有序列表。

es中的數組每一項均可以保存任何類型的數據,數組大小也能夠動態調整。數組

方法一 : new能夠省略;
var colors = new Array();
方法二 : 數組字面量
var colors = ["red","blue","green"];

與對象同樣,字面量不會調用Array構造函數。瀏覽器

var colors = ["red","blue","green"];
colors[0] // 顯示第一項
colors[2] = "black"; // 修改第二項
colors[3] = "brown" ; //增長第四項
colors.length = "black" ;  增長一項

length屬性可返回數組的長度,可增長和移除數組的項。數據結構

* 檢測數組

value instanceof Array // 判斷是否爲數組
Array.isArray(value) // isArray肯定究竟是不是數組,無論在哪一個環境中建立
* 轉換方法

全部對象都具備toLocalString()方法,後臺調用tostring(),null和undefined返回結果以空字符串表示。app

* 棧方法 : 後進先出(吃了吐)

push() : 接受任意數量參數,添加到末尾;
pop() : 移除數組末尾一項。dom

* 隊列方法 : 先進先出(吃了拉);

shift() : 前端移除項並返回該項,長度減1;
unshift() : 前端推入一項;函數

* 重排序方法

reverse() : 逆序;
sort() : 順序;
比較的是字符串,會自動轉爲字符串。
如 "10" 位於"5"的前面,所以應傳給sort一個比較函數。

function compare(value1,value2){    
    if(value1 < value2){        
        return -1;    
    }else if(value1 > value2){        
    return 1;    
    }else{        
    return 0;    
    }
    }
value = [0,1,5,10,15];value.sort(value);  //0,1,5,10,15
* 操做方法

concat()拼接 : 先把原數組複製一個,而後把參數添加至末尾,原數組不變。slice(1,2) : 剪切:返回參數1起始位置,參數2爲結束位置,包前不包後,原數組不變。solice() : 主要向數組中插入項。(數組操做最主要的方法):
-刪除 : 可刪除任意數量項,制定兩個參數: arg1位要刪除的位置,arg2爲要刪除的項數,例:splice(0,2) : 刪除前兩項;
-插入 : 三個參數。起始位置,刪除項數和要插入的項,可在後面插入多個項。例 : solice(2,0,"red","green");從位置2插入"red"和"green".
-替換 : 同上,插入項沒必要與刪除項數相等。
注意 : splice()會改變原始數組;

* 位置方法

indexof() : 從頭查找
lastIndexof() : 從未查找
arg1表示要查找的項,arg2爲起始位置(可選參數),沒找到返回-1,比較時使用的是全等。

var number = [1,2,3,4,5,4,3,2,1];
number.indexof(4) ;  //返回5

* 迭代方法

every();
filter();
forEach();
map();

* 歸併方法

reduce() : 從頭
reduceRight ; 從尾
都會迭代數組全部項,構建一個最終返回項。

三、Date類型

var now = new Data();
date.parse("May 25,2004"); // 新建特定日期
* 繼承: 重寫了3個方法

toLocalString() : 瀏覽器設置日期;
toString();
valueof();

* 日期格式化方法:

-toDateString() : 特定格式顯示星期、月、日、年;
-toTimeString() : 時分秒,時區;
toLocalDateString() : 按地區顯示星期、月、日、年;
toLocalTimeString() : 時分秒;
toUTCString() : 特定格式顯示完整UTC日期,具體顯示因瀏覽器而異。

四、RegExp類型: 正則表達式;

var expression = /pattern/flags;
標誌flags包括 :
g : 全局;
i : 不區分大小寫;
m : 多行模式;
例子 : var pattern = /at/g 全局找at
var pattern = /[bc]at/i ; 匹配第一個bat或cat,不區分大小寫。
無心符須轉義;
* RegExp實例方法:

RegExp主要方法是
-exec():捕獲組,參數爲一個字符串,返回數組,無匹配返回null,返回多兩個額外屬性:index 和 input。
index : 位置 input:捕獲的字符串
-test():匹配則返回true,經常使用來驗證用戶輸入。

五、function類型

* 概念

函數實際就是對象,與其餘引用類型同樣,有屬性和方法,函數名就是隻想對象的指針。

* 沒有重載

聲明相同函數時,後面的會覆蓋前面的函數。

* 函數聲明和函數表達式
function sum(){    }    // 函數聲明
var sum = function(){    }      // 函數表達式函數聲明能夠變量提高,任什麼時候候任何位置均可以調用。
* 做爲值的函數

把函數做爲參數傳給另外一個函數,要訪問函數而不執行函數,必須去掉函數名後面的那對圓括號
// 從一個函數返回另外一個函數
// 根據某個對象數組排序
function compare(pro){

return function(obj1,obj2){        
var val1 = obj1[pro];        
var val2 = obj2[pro];        
if(val1 > val2){            
return 1;        
}else if(val1 < val2){  
          return -1;        
}else{
          return 0;        
}}}
var data = [{name:"AN:,"age":20},{name:"BN:,"age":30}]
data.sort(compare("name"));
* 函數的內部屬性

內部含有兩個特殊對象:this和argument
-argument:包含着傳入的全部參數,內有callee屬性,是一個指針,只想擁有此對象的函數。
// 遞歸算法算階乘
function fac(num){

if(num <= 1){
        return 1;    
        }else{
      return num * fac(num-1);   // 等同於 return num * argument.callee(num -1);
      }}
 方法一與函數名耦合嚴重,且只有名稱肯定或不發生改變時使用。
 方法二更合適
* this : 引用的是函數執行的環境對象,函數的名稱僅爲包含着指針的變量而已,因此在不一樣的環境中執行引用的也是相同的函數。

* 函數的屬性和方法(重點)

函數也是對象,所以有屬性和方法;

* -屬性 : length 和 prototype

-length 表示但願接收命名參數的個數。
-prototype 是保存全部勢力和方法的真正所在,如裏面保存着tostring(),valueOf等,也能夠用來繼承,極爲重要。
prototype屬性不可枚舉,所以不能用for-in。

* -方法 : 非繼承而來的方法有兩個: apply() 和 call().

做用爲在特定的做用域中調用函數,實際是設置函數體內this對象的值。兩個方法的做用相同,區別爲接收參數的方式不一樣。call() : 參數一一列舉
apply() : 參數爲一個數組二者的做用不止是傳遞參數,真正的做用是擴充函數的做用域。把訪問不到的地方傳進來。
bind():方法,建立函數實例,與this值綁定,全局做用域。

六、基本包裝類型 (也是對象)

爲方便操做基本類型值,提供3個特殊引用類型:Boolean,Number和String.
每讀取值後臺都會建立對應的基本包裝類型的對象,才能夠用方法操做數據。
引用類型與基本包裝類型主要區別爲對象生存期,用new建立引用累心實例一直保存在內存中,自動建立基本包裝類型存在執行瞬間,而後當即銷燬,因此不能給基本類型添加屬性和方法。

* Boolean 類型

typeof 基本類型 // ‘boolean’typeof 引用類型 // 'object'建議永不要使用Boolean對象

* Number 類型

toFixed()方法 : 按照指定方法返回數值的字符串表示。
var num = 10;num.tpFixed(2) // '10.00'
toExpoential() : 冪

* String 類型

屬性:length : 表示含多少個字符方法:
1)字符方法:charAt()和charCodeAt():查找某個字符在字符串中的位置。 charCodeAt():查找字符編碼
2)字符串操做方法:拼接用+號
-三個給予字符串建立新串:
slice():切片 // 第一個參數爲起始位置,第二個參數爲結束位置substr():子函數 // 第一個參數爲起始位置,第二個參數爲截取的個數substring():子串 // 第一個參數爲起始位置,第二個參數爲結束位置
以上方法都不會影響原始字符串
3)字符串位置方法:
indexof:從字符串中查找字符串,返回位置,查不到則返回-1.
indexOf:從頭查找lastIndexOf:從尾查找 返回第一次出現的位置
4)trim:建立字符串副本,刪除先後全部空格,原始字符串不變。
5)字符串大小寫轉變:
toLocalUpperCase():轉大寫,針對特定地區
toLocalLowerCase():轉小寫,針對特定地區
toUpperCase():轉大寫
toLowerCase():轉小寫
6)字符串模式匹配方法:
match():與RegExp的exec方法相同,參數爲正則表達式活RegExp對象。
search():從尾開始查找,參數與match相同,找不到返回-1
replace():替換
split():切片,基於指定分隔符字符串爲多個子字符串。第二個參數可選,返回幾個數組。

七、單體內置對象

已自行實例化,可直接使用,Global和Math

* -Global對象,全局對象:全部全局做用域中屬性和方法都是它的。

--url編碼
--eval():解析字符串代碼並執行

* -Math對象

--Math.ceil():向上取整。
--Math.floor():向下取整。
--Math.round():四捨五入。

* random()方法:隨機數,返回0~1之間隨機數。
相關文章
相關標籤/搜索