第五章 引用類型前端
var person = new Object( );正則表達式
person.name = 「Nicholas」;express
person.age=29;數組
第二種是使用對象字面量表示法。如:瀏覽器
var person = {數據結構
name : 「Nicholas」,app
age : 29dom
};函數
在最後一個屬性後面添加逗號,會在IE7及更早版本和Opera中致使錯誤。this
如 var colors = [「yellow」,」red」,」green」];
alert(colors.join(「|」)); //yellow|red|green
若是不給join( )方法傳入任何值,或者給它傳入undefined,則使用逗號做爲分隔符。IE7及更早版本會錯誤的使用字符串「undefined」做爲分隔符。
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow",["black","brown"]);
colors //["red", "green", "blue"]
colors2 //["red", "green", "blue", "yellow", "black", "brown"]
var colors3=colors2.slice(1); //["green", "blue", "yellow", "black", "brown"]
var colors4 = colors2.slice(1,4); // ["green", "blue", "yellow"]
slice()方法的參數中有一個附屬,則用數組長度加上該數來肯定相應的位置。
var colors5 = colors2.slice(-2,-1); // ["black"]
刪除:能夠或刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置,和要刪除的項數;
插入:能夠向指定位置插入任意數量的項,需指定3個參數:起始位置、0(要刪除的項數)、要插入的項數。
替換:能夠向指定位置插入任意數量的項,且同時刪除任意數量的項,需指定3個參數:起始位置,要刪除的項數、要插入的任意數量的項。
Splice( )方法始終都會返回一個數組,該數組中包含從原始數組中刪除的項(若是沒有刪除任何項,則範湖一個空數組)。
var colors = ["red","green","blue"];
var removed = colors.splice(0,2);
colors //["blue"]
removed //["red", "green"]
removed = colors.splice(0,0,"yellow","orange"); //[]
colors //["yellow", "orange", "blue"]
removed = colors.splice(1,3,"red","pink"); //["orange", "blue", "yellow"]
colors //["yellow", "red", "pink", "orange"]
var colors = ["yellow", "orange", "blue"];
removed = colors.splice(1,2,"red","pink"); //["orange", "blue"]
colors //["yellow", "red", "pink"]
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.indexOf(4); //3
numbers.indexOf("4"); //-1
numbers.lastIndexOf("4"); //-1
numbers.lastIndexOf(4); //5
numbers.indexOf(4,4); //從起始位置向後找
numbers.lastIndexOf(4,4) //3 從起始位置向前找
numbers.lastIndexOf(4,5) //5從起始位置向前找
var person ={name:"Nicholas"};
var people=[{name:"Nicholas"}];
var morePeople = [person];
people.indexOf(person); //-1
morePeople.indexOf(person); //0
every( ):對數組中的每一項運行給定函數,若是該函數對每一項都返回true,則返回true;
filter( ): 對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組;
forEach( ):對數組中的每一項運行給定函數,無返回值;
map( ):對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組;
some( ):對數組中的每一項運行給定函數,若是該函數對任一項返回true,則返回true。
以上方法都不會修改數組中的包含的值。
Date.parse( )方法接收一個表示日期的字符串參數,而後嘗試根據這個字符串返回相應日期的毫秒數。若是該字符串不能表示日期,則會返回NaN。
Date.UTC( )返回日期的毫秒數,但與Date.parse( )在構建時使用不一樣的信息。
ECMAScript 5添加了Date.now( )方法,返回表示調用這個方法時的日期和時間的毫秒數。
toDateString( )——以特定於實現的格式顯示星期幾、月、日和年;
toTimeString( )——以特定於實現的格式顯示時、分、秒和時區;
toLocaleDateString( )——以特定於地區的格式顯示星期幾、月、日和年;
toLocaleTimeString( )——以特定於實現的格式顯示時、分、秒;
toUTCString( )——以特定於實現的格式完整的UTC日期。
沒有一個方法可以用來在用戶界面中顯示一致的日期信息。
g: 表示全局(global)模式,即模式將被應用於全部字符串,而非在發現第一個匹配項時當即中止;
i : 表示不區分大小寫模式,即在肯定匹配項時忽略模式與字符串的大小寫;
m:表示多行模式,即在到達一行文本末尾時還未繼續查找下一行中,是否存在於模式匹配的項。記住:不往前找。
模式中使用的全部元字符都必須轉義,正則表達式中的元字符包括:
( [ { \ ^ $ | } ? * + . ] }
使用RegExp構造函數建立正則表達式,兩個參數:一個是要匹配的字符串模式,一個是可選的標誌字符串。這兩個參數都是字符串!
使用正則表達式字面量和使用RegExp構造函數建立的正則表達式不同。在ECMAScript 3中,正則表達式字面量始終會共享同一個RegExp實例,而使用構造函數建立的每個新RegExp實例都是一個新實例。但在ECMAScript5中,二者都會建立新的RegExp實例。
global:布爾值,表示是否設置了g標誌;
ignoreCase: 布爾值,表示是否設置了i標誌;
lastIndex : 整數,表示開始搜索下一個匹配項的字符位置,從0算起;
multiline: 布爾值,表示是否設置了m標誌;
source:正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回。
主要方法是exec( ),該方法是專門爲捕獲組而設計的。exec( )接收一個參數,即要應用模式的字符串,而後返回包含第一個匹配項信息的數組,若無匹配項,則返回null。返回的數組是Array的實例,但包含兩個額外的屬性:index和input。對於exec( )方法而言,不設置全局標誌的狀況下,在同一個字符串中屢次調用exec( )將始終返回第一個匹配項的信息,而在設置全局標誌的狀況下,每次調用exec( )則都會在字符串中繼續查找新匹配項。
test( )方法接收一個字符串參數,在模式與該參數匹配的狀況下返回true,不然返回false。
正則表達式的valueOf( )方法返回正則表達式自己。
apply( )方法接收兩個參數:一個是在其中運行函數的做用域,另外一個是參數數組。其中第二個參數能夠是Array的實例,也能夠是arguments對象。
call( )方法與apply( )方法的做用個相同,它們的區別僅在於接收參數的方式不一樣。對於call( )方法而言,第一個參數是this值沒有變化,變化的是其他參數都直接傳遞給函數。換句話說,在使用call( )時,傳遞給函數的參數必須逐個列舉出來。
apply( )和call()最強大的地方在於可以擴充函數賴以運行的做用域。好處是對象不須要與方法有任何耦合關係。
ECMAScript 5 還定義了一個方法:bind( )。這個方法會建立一個函數的實例,其this值會被綁定到傳給bind( )函數的值。
|
slice( ) |
substring( ) |
substr( ) |
||
第一個參數 |
指定字符串的開始位置 |
||||
第二個參數 |
指定子字符串最後一個字符後面的位置,若無則到結尾 |
指定返回字符的個數,若無則到結尾 |
|||
是否修改字符串自己的值 |
否 |
||||
參數爲負值 |
將傳入的負值與字符串的長度想家 |
把全部的負值參數轉換爲0 |
將負的第一個參數加上字符串的長度,將負的第二參數轉換爲0 |
||
|
indexOf( ) |
lastIndexOf( ) |
功能 |
從一個字符串中搜索給定的字符串,而後返字符串的位置,若是沒有找到,則返回-1 |
|
區別 |
從字符串的開頭向後搜索子字符串 |
從字符串的末尾向前搜索子字符串 |
match( )方法只接受一個參數,要麼是一個正則表達式,要麼是一個RegExp對象。返回一個數組,數組的第一項是與整個模式匹配的字符串,以後的每一項(若是有)保存着與正則表達式中的捕獲組匹配的字符串。
search( )方法只接收一個參數,要麼是一個正則表達式,要麼是一個RegExp對象。返回字符串中第一個匹配項的索引,若無匹配項,則返回-1.該方法始終是從字符串開頭向後查找模式。
replace( )方法接受兩個參數:第一個參數能夠是一個RegExp對象或者一個字符串(這個字符串不會被轉換成正則表達式),第二個參數能夠是一個字符串或者一個函數,此時函數接受3個參數:模式的匹配項、模式匹配項在字符串中的位置和原始字符串。
split( )能夠基於指定的分隔符將一個字符串分割成多個子字符串,並將結果放在一組數組中,分隔符能夠是字符串,也能夠是一個RegExp對象(這個字符串不會被轉換成正則表達式)。split( )方法能夠接收可選的第二個參數,用於指定數組的大小,以確保返回的數組不會超過既定大小。
若是字符串在字母表中應該排在字符串參數以前,則返回一個負數(大多數狀況下是-1,視狀況而定);
若是字符串等於字符串參數,返回0;
若是字符串在字母表中應該排在字符串參數以後,則返回一個整數(大多數狀況下是1,視狀況而定)。
Global(全局)對象,不屬於任何其餘對象的屬性和方法,最終都是它的屬性和方法。Global對象的encodeURI( )和encodeURIComponent( )方法能夠對URI( Uniform Resource Identifiers,通用資源標識符)進行編碼,以便發給瀏覽器。其中,encodeURI( )主要用於整個URI,而encodeURIComponent( )主要用於對URI中的某一段進行編碼。區別在於,encodeURI( )不會對自己屬於URI的特殊字符進行編碼,例如冒號、正斜槓、問號和井字號,而encodeURIComponent( )則會對它發現的任何非標準字符進行編碼。encodeURI( )和encodeURIComponent( )對應的兩個方法分別是decodeURI( )和decodeURIComponent( ),其中decodeURI( )只能對使用encodeURI( )替換的字符進行解碼,同理,decodeURIComponent( )只能替換encodeURIComponent( )編碼,便可以解碼任何特殊字符的編碼。
eval( )方法是ECMAScript語言中最強大的一個方法,就像一個完整的ECMAScript解析器,它只接收一個參數,即要執行的ECMAScript(或JavaScript)字符串。嚴格模式下,在外部訪問不到eval( )中建立的任何變量或函數。
Math對象的屬性見書134頁。
Math對象的min( )和max( )方法。可接收任意多個數值參數。
舍入方法:Math.ceil( )向上舍入成最接近的整數;Math.floor( )向下舍入爲最接近的整數,Math.round( )執行標準舍入,四捨五入爲最接近的整數。
Random( )方法返回大於等於0小於1的一個隨機數。