JavaScript引用類型知識點的整理

一、Function:函數(方法)對象

1.1 概念

  1. 屬性: length:代表形參的個數
  2. 特點:
    ①. 方法定義是,形參的類型不用寫,返回值類型也不寫。
    ②. 在JS中,方法的調用只與方法的名稱有關,和參數列表無關
    ③. 在方法聲明中有一個隱藏的內置對象(數組),arguments,封裝所有的實際參數
  3. 調用:方法名稱(實際參數列表);

函數通常是使用函數聲明語法定義的,function關鍵字後面沒有函數名,函數末尾有一個分號。

function sum(num1,num2){
	return num1+num2;
}
alert(sum(10,10));    //20

var anotherSum = sum;
alert(anotherSum(10,10));//20

sum = null;
alert(anotherSum);//20

使用不帶圓括號的函數名是訪問函數指針,而非調用函數

1.2 沒有重載

function addSomeNumber(num){
	return num+100;
}

function addSomeNumber(num){
	return num+200;
}

上面雖然聲明瞭兩個同名函數,而結果則是後面的函數覆蓋了前面的函數。

1.3 函數聲明與函數表達式

alert(sum(10,10));
function(num1,num2){
	return num1+num2;
}

上面的代碼是可以正常運行的,對代碼求值時,JavaScript引擎在第一遍會聲明函數並將它們放到源代碼樹的頂端。但是把上面的函數聲明改爲等價的函數表達式,就會在執行期間導致錯誤。

alert(sum(10,10));
var sum = function(num1,num2){
	return num1+num2;
}

原因在於函數位於一個初始化語句中,而不是一個函數聲明。

二、Array:函數對象

2.1 概念

  1. 創建:
    ①. var arr = new Array(元素列表);
    ②. var arr = new Array(默認長度);
    ③. var arr = [元素列表];
  2. 屬性:length:數組的長度通過設置這個屬性,可以從數組的末尾移除項或向數組中添加新項。
  3. 特點:
    ①. JS中,數組元素的類型可變的。
    ②. JS中,數組長度可變的。

2.2 轉換方法

var colors = ["red","bule","green"];//創建一個包含3個字符串的數組
alert(colors.toString());    //red,bule,green
alert(colors.valueOf());     //red,bule,green
alert(colors);               //red,bule,green

當調用數組的toLocalString()方法時,它也會創建一個數組值得以逗號分隔得字符串。
數組繼承的toLocalString(),toString()和valueOf()方法,在默認情況下都會以逗號分隔的字符串的形式返回數組。
如果使用join()方法,則可以使用不同的分隔符來構建這個字符串。join()方法只接收一個參數,即用作分隔符的字符串,然後返回包含所有數組項的字符串。

var colors = ["red","bule","green"];
alert(colors.join(","));  //red,green,bule
alert(colors.join("||"));  //red||green||bule

如果不過join()方法傳入任何值,或者給它傳入undefined,則使用逗號作爲分隔符。

2.3 棧方法

棧中項的插入(叫推入)和移除(叫彈出)只發生在一個位置————棧的頂部。

  1. push()方法可以接受任意數量的參數,把它們逐個添加到數組的末尾,並返回修改後數組的長度
  2. pop()方法則從數組末尾移除最後一項,減少數組的length值,然後返回移除的項。
var colors = new Array();    //創建一個數值
var count  = colors.push("red","green");   //推入兩項
alert(count);     //2

count = colors.push("black");   //推入另一項
aleret(count);//3

var item = colors.pop();     //取得最後一項
alert(item);         //"black"
alert(colors.length);   //2

可將棧方法與其他數組方法連用

var colors = ["red","blue"];
colors.push("brown");//添加另一項
colors[3] = "black";//添加一項
alert(colors.length);//4

三、Date:函數對象

3.1 Date.parse()和Date.UTC()區別

  1. Date.parse()方法接受一個表示日期得字符串參數,然後嘗試根據這個字符串返回相應日期的毫秒數。如果傳入Date.parse()方法的字符串不能表示日期,那麼它會返回NaN。
  2. Date.UTC()方法同樣也返回表示日期的毫秒數;Date.UTC()的參數分別是年份、基於0的月分(一月是0,二月是1,以此類推)、月中的那一天(1到31)、小時數(0到23)、分鐘、秒以及毫秒數。
    ==只有前兩個參數(年和月)是必需的。==如果沒有提供月中的天數,則假設天數爲1;如果省略其他參數,則統統假設爲0.
//GMT時間 2000年1月1日午夜零時
var y2k = new Date(Date.UTC(2000,0));

//GMT時間2005年5月5日 下午5:55:55
var allFives = new Date(Date.UTC(2005,4,5,17,55,55));

3.2 日期格式化方法

  1. toDateString()—>以特定於實現的格式顯示星期幾、月、日和年。
  2. toTimeString()—>以特定於實現的格式顯示時、分、秒和時區。
  3. toLocalDateString()—>以特定於地區的格式顯示星期幾、月、日和年。
  4. toLocalTimeString()—>以特定於實現的格式顯示時、分、秒。
  5. toUTCString()—>以特定於實現的格式完整的UTC日期。

四、RegExp:函數對象

4.1 概念

  • ECMAScript通過RegExp類型來支持正則表達式。
var expression = / pattern / flags;

(pattern)部分可以是任何簡單或複雜的正則表達式,每個正則表達式都可帶有一或多個標誌(flags),用以表明正則表達式的行爲。

  • g:表示全局(global)模式,即模式將被應用於所有的字符串。
  • i:表示不區分大小寫(case-insensitive)模式,即在確定匹配項時忽略模式與字符串的大小寫。
  • m:表示多行(multiline)模式,即在到達一行文本末尾時還會繼續查找下一行中是否存在與模式匹配的項。
/*匹配字符串中所有"at"的實例*/
var pattern1 = /at/g;

/*匹配第一個"bat"或"cat",不區分大小寫 */
var pattern2 = /[bc]at/i;

/*匹配所有以"at"結尾的3個字符的組合,不區分大小寫*/
var pattern3 = /.at/gi;

與其他語言中的正則表達式類似,模式中使用的所有的==元字符都必須轉義。==正則表達式的元字符如下:

( [ { \ ^ $ | ) ? * + . ] }

創建正則表達式的方式是使用RegExp構造函數,接受兩個值:一個是要匹配的字符串模式,另一個是可選的標誌字符串。

/*匹配第一個"bat"或"cat",不區分大小寫 */
var pattern1 = /[bc]at/i;

/*與pattern1相同,只不過是使用構造函數創建的*/
var pattern2 = new RegExp("[bc]at","i");

4.2 RegExp實例屬性

  1. global:布爾值,表示是否設置了g標誌。
  2. ignoreCase:布爾值,表示是否設置了 i 標誌。
  3. lastIndex:整數,表示開始搜索下一個匹配項的字符位置,從0算起。
  4. multiline:布爾值,表示是否設置了 m 標誌。
  5. source:正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回。
var pattern1 = /\[bc\]at/i;

alert(pattern.global);//false
alert(pattern.ignoreCase);//true
alert(pattern.multiline);//false
alert(pattern.lastIndex);//0
alert(pattern.source);//"\[bc\]at"

五、Global 對象

不屬於任何其他對象的屬性和方法,最終都是它的屬性和方法。
所有在全局作用域中定義的屬性和函數,都是Global對象的屬性。

5.1 URI 編碼方法

encodeURI()主要用於整個URI(例如http://www.wrox.com/illegal value.htm),而encodeURIComponent()主要用於對URI中的某一段(例如前面URI中的illegal value.htm)進行編碼。

  • 主要區別:
  1. encodeing():不會對本身屬於URI的特殊字符進行編碼,例如冒號、正斜槓、問號和井字號。
  2. encodeURIComponent():會對它們發現的任何非標準字符串進行編碼。
var uri = "http://www.wrox.com/illegal value.htm#start";

//"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));

//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));

對應解碼的方法爲:

  1. decodeURI():只能對使用encodeURI()替換的字符串進行解碼。
  2. decodeURIComponent():能夠解碼使用encodeURIComponent()編碼。

六、Math 對象

6.1 min()和max()方法

  • min()和max()方法用於確定一組數值中的最小值和最大值。
  • 要找到數組中的最大值或最小值可以使用apply()方法。
var values = [1,2,3,4,5,6,7,8];
var max = Math.max.apply(Math,values);

這個技巧的關鍵是把Math對象作爲apply()的第一個參數,從而正確的設置this值。然後可以將任何數組作爲第二個參數。

6.2 舍入方法

  1. Math.ceil():執行向上舍入,即它總是將數值向上舍入爲最接近的整數。
  2. Math.floor:執行向下舍入,即它總是將數值向下舍入爲最接近的整數。
  3. Math.round():執行標準舍入,即它總是將數值四捨五入爲最接近的整數。

6.3 random()方法

  • Math.random()方法返回大於等於0小於1的一個隨機數。
  • 函數selectFrom()接受兩個參數:應該返回的最小值和最大值。而用最大值減去最小值再加1得到了可能值得總數。
var colors = ["red","green","bule","yellow","black","purple","brown"];
var color = colors.[selectFrom(0,colors.length-1)];
alert(color);//可能是數組中包含的任何一個字符串。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章