5.1 Object類型css
每一項能夠保存任何類型的數據;html
大小能夠動態調整前端
length大小可變(最大值4294967295)java
//不指定大小var colors1 = new Array();//指定大小var colors2 = new Array(20); //指定數組項var color3 = new Array('red', 'blue', 'green');//省略new 操做符var color4 = Array(''red', 'blue', 'green');
var colors1 = ['red', 'blue', 'green'];//是喲那個字面量的BUG//這樣會建立一個2(IE9+等)或3(IE8-)項的數組var values = [1 ,2, ];
if(value instanceof Array){ //對數組進行某些操做}
if(Array.isArray(value)){ //對數組執行某些操做}
IE9+ | Firefox4+ | Safari5+ | Opera10.5+ | Chrome |
toLocalString() : 調用數組每一項的toLocalString()方法,將返回的每一個字符串拼接成一個以逗號分隔的字符串。正則表達式
toString() : (隱式轉換默認調用)調用數組每一項的toString()方法,將返回的每一個字符串拼接成一個以逗號分隔的字符串。數組
valueOf() : 返回的仍是數組。瀏覽器
join(【】) : 指定轉換成字符串時使用的分隔符,默認或設爲undefined將使用','數據結構
push() : 接受任意數量的參數,逐個添加到數組末尾,並返回修改後數組的長度
**param{any} 要添加到數組末尾的值或引用**...**return {Number} 修改後數組的長度
pop() : 從數組末尾移除最後一項,減小數組的length值,而後返回移除的項
**return {any} 移除的項
var colors = new Array(); //建立一個數組var count = colors.push('red', 'green'); //推入兩項alert(count); //2count = colors.push(black); //推入另外一項alert(count); //3var item = colors.pop(); //取得最後一項alert(item); //'black'alert(colors.length); //2
shift() : 移除數組中的第一項並返回該項,同時將數組長度減一。app
var colors = new Array();var count = colors.push('red', 'green'); //推入兩項alert(count); //2count = colors.push('black'); //推入另外一項alert(count); //3var item = colors.shift(); //取得第一項alert(item); //'red'alert(colors.length); //2
unshift() : 在數組前端添加任意個項兵返回新數組的長度。dom
var colors = new Array();var count = colors.unshift('red', 'green'); //推入兩項alert(count); //2count = colors.unshift('black'); //推入另外一項alert(count); //3var item = colors.pop(); //取得最後一項alert(item); //'green'alert(colors.length); //2
reverse() : 反轉數組項的順序
var values = [1, 2, 3, 4, 5];values.reverse();alert(values); //5,4,3,2,1sort() : 接受一個比較函數函數來排序,默認按升序排列(調用每一個數組項的toString()轉型方法轉化爲字符串而後對字符串排序)//1.無參數var values = [0, 1, 5, 10, 15];values.sort();alert(values); //0, 1, 10, 15, 5//2.傳入比較函數/**比較函數接受兩個參數*/function compare(value1, value2){ //升序 if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; }}/*function cpmpare(value1, value2){ return value1 - value2;}*/var values = [0, 1, 5, 10, 15];values.sort(compare);alert(values); //0, 1, 5, 10, 15
concat() : 基於當前數組中設爲全部項建立一個新數組
建立當前數組的一個副本;
將接收到的參數[數組|元素][每一項分別添加|添加]到副本的尾部;
返回新構建的數組。
var colors = ['red', 'green', 'blue'];var colors2 = colors.concat('yellow', ['black', 'brown']);alert(colors); //'red, green, blue'alert(colors2); //'red, green, blue, black, brown'
slice() : 接受1或2個參數,返回當前數組的一部分
一個參數:返回指定位置到數組末尾的全部項;
兩個參數:返回起始位置到結束位置(不包含)的項。
參數有負值:數組長度+該值 = 位置
var colors = ['red', 'green', 'blue', 'yellow', 'purple'];var colors2 = colors.slice(1);var colors3 = colors.slice(1,4);alert(colors); //'red, green, blue, yellow, purple'alert(colors2); //'green, blue, yellow, purple'alert(colors3); //'green, blue, yellow'
splice() : 最強大的操做數組的方法
刪除: 2個參數, (要刪除的第一項的位置, 刪除的項數)
插入: 3+個參數, (起始位置, 0, 插入的項, ...)
替換: 3+個參數, (起始位置, 要刪除的項數, 插入的項, ...), 要刪除的項數 = 插入的項數
var colors = ['red', 'green', 'blue'];var removed = colors.splice(0, 1); //刪除第一項alert(colors); //'green, blue'alert(removed); //red, 返回數組中只包含一項removed = colors.splice(1, 0, 'yellow', 'orange'); //從位置1開始插入兩項alert(colors); //'green, yellow, orange, blue'alert(removed); //[]removed = colors.splice(1, 1, 'red', 'purple'); //插入兩項,刪除一項alert(colors); //'green, red, purple, orange, blue‘alert(removed); //yellow,返回的數組中只包含一項
indexOf() : 從前日後查找;兩個參數, 要查找的項【和表示查找起點位置的索引】,返回查找的項在數組中的位置(沒找到返回-1)
lastIndexOf() : 從末尾向前查找,其它同上
IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
兩個參數
參數一:在每一項上運行的函數
參數二:運行函數的做用於對象(影響 this 的值)
傳入函數中的方法包含三個參數
參數一:數組項的值
參數二:該項在數組中的索引下標
參數三:數組對象自己
都不會修改數組中包含的值。
every() : 對數組中的每一項給定函數,每一項都返回true,則返回true
filter() : 對數組中的每一項給定函數,返回會返回true的項組成的數組
forEach() : 對數組中的每一項給定函數,沒有返回值
map() : 對數組中的每一項給定函數 ,返回每次函數調用的結果組成的數組
some() : 對數組中的每一項給定函數,只要有一項返回true,就返回true
IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
參數一:param {function} 在每一項上調用的函數(4個參數)
參數一:前一個值
參數二: 當前值
參數三:項的索引
參數四: 數組對象
參數二:【param {}】做爲縮小基礎的初始值
reduce() : 從第一項開始迭代數組的全部項,而後構建一個最終返回的值
var values = [1,2,3,4,5];var sum = values.reduce(function(prev,cur,index,array){ return prev + cur;});alert(sum); //15
reduceRight() : 從最後一項開始迭代數組的全部項,而後構建一個最終返回的值
var values = [1,2,3,4,5];var sum = values.reduceRight(function(prev,cur,index,array){ return prev + cur;});alert(sum); //15
第n個參數 | 表明 | 範圍 | 默認值 | 必須 |
1 | 年 | (無) | (無) | 是 |
2 | 月 | 0-11 | (無) | 是 |
3 | 日 | 1-31 | 1 | 否 |
4 | 時 | 0-23 | 0 | 否 |
5 | 分 | 0-59 | 0 | 否 |
6 | 秒 | 0-59 | 0 | 否 |
7 | 毫秒 | 0-999 | 0 | 否 |
var nowDate = new Date(); //當前時間var specifyDate = new Date(1409540631971);var parseDate = new Date('May 25, 2014'); //後臺自動調用Date.parse()將字符串轉爲毫秒數var utcDate = new Date(2014, 4, 5, 17, 55, 55); //將根據本地時區轉換爲毫秒數(不一樣於Date.UTC(),後者參照GTC(格林尼治))
基於Java的java.util.Date構建;
使用UTC毫秒數保存日期(1970.01.01 +- 285616年)。
Date.parse('日期')
var someDate = new Date(Date.parse('May 25, 2004'));
日期格式 | 例子 | 兼容性 |
'月/日年' | '6/13/2004'; | |
'英文月 日, 年' | 'January 12, 2004'; | |
YYYY-MM-DDTHH:mm:ss:sssZ | 2004-05-25-T00:00:00 | ECMAScript 5 |
Date.UTC(n個參數)
//GMT時間2000年1月1日午夜零時var y2k = new Date(Date.UTC(2000,0));//GMT時間2014年9月1日上午10:53var y2k = new Date(Date.UTC(2014, 8, 1, 10, 53));
第n個參數 | 表明 | 範圍 | 默認值 | 必須 |
1 | 年 | (無) | (無) | 是 |
2 | 月 | 0-11 | (無) | 是 |
3 | 日 | 1-31 | 1 | 否 |
4 | 時 | 0-23 | 0 | 否 |
5 | 分 | 0-59 | 0 | 否 |
6 | 秒 | 0-59 | 0 | 否 |
7 | 毫秒 | 0-999 | 0 | 否 |
Date.now()
new Date.getTime();
+new Date(). 兼容性更好,推薦
//取得開始時間//var start = new Date().getTime();//var start = +new Date();var start = Date.now(); doSomething();//取得中止時間var stop = Date.now(),result = stop - start;
IE9+ | Fire 3+ | Firefox 3+ | Safari3+ | Opera 10.5 | Chrome |
new Date().toString()
new Date().toLocalString()
new Date().valueOf()
toDateString()
toTimeString()
toLocalDateString()
toLocalTimeString()
toUTCString() (toGTMString()不推薦)
函數聲明
/** 特色* 1.具備侷限性,不能定義在if、while、for、try-catch等結構中* 2.能夠定義在被引用後(函數聲明提早)*/function sum(num1, num2){ return num1+num2;}
函數表達式
/** 特色* 1.能夠定義在任何位置*/var sum = function(num1, num2){ return num1 + num2;};
Function構造函數
/** 最後一個參數是函數體,前面的全部參數枚舉出新函數的參數* 特色:* 1.存在性能問題,須要解析兩次(第一次是解析常規ECMAScript代碼;第二次解析傳入構造函數的字符串)* 2.執行環境爲window* 3.能夠看做一種函數表達式*/var sum = new Function(num1, num2){ return num1 + num2;};
/*** 對數組對象進行排序的比較函數* @param{string} propertyName 按照哪一個屬性來排序* @return{function} 比較函數*/function createComparisonFunction(propertyName){ return function(obj1, obj2){ var value1 = obj1[propertyName]; var value2 = obj2[propertyName]; if(value1 < value2){ return -1; }else if(value1 > value2){ reuturn 1; }else{ return 0; } };}var data = [{name:'Zachary', age:28}, {name:'Nicholas', age:29}];data.sort(createComparisonFunction('name');alert(data[0].name); //Nicholasdata.sort(createComparisonFunction('age');alert(data[0].name); //Zachary
arguments : 類數組對象
arguments.callee : (ECMAScript 5)指向擁有這個arguments對象的函數
function factorial(num){ if(num <= 1){ return 1; }else{ return num * arguments.callee(num-1); }}
arguments.caller OR caller: (ECMAScript 5)指向調用者
function outer(){ inner();}function(){ //嚴格模式下致使錯誤 alert(arguments.callee.caller);}outer();
length : 函數但願接收的命名參數的個數
function sayName(name){ alert(name);}function sum(num1, num2){ return num1 + num2;}function sayHi(){ alert('hi');}alert(sayName.length); //1alert(sum.length); //2alert(sayHi.length); //0
prototype : (不可枚舉)指向原型的指針,保存着全部的實例方法
apply() : 每一個函數都包含該方法,用於在特定的域中調用。接受兩個參數(做用域和參數數組)
function sum(num1, num2){ return num1 + num2;}function callSum1(num1, num2){ return sum.apply(this, arguments); //傳入arguments對象數組(apply將其看成一個普通數組使用)}function callSum2(num1, num2){ return sum.apply(this, [num1, num2]); //傳入arguments對象}alert(callSum1(10, 10)); //20alert(callSum2(10,10)); //20
call() : 和apply()相似,不過傳遞給函數的參數必須逐個列出來而不是給數組
function sum(num1, num2){ return num1 + num2;}function callSum(num1, num2){ return sum.call(this, num1, num2); //傳入arguments對象數組(apply將其看成一個普通數組使用)}alert(callSum1(10, )); //20
window.color = 'red';var o = {color:'blue'};function sayColor(){ alert(this.color);}var objectSayColor = sayColor.bind(o);objectSayColor(); //blue
IE9+ | Firefox4+ | Safari 5.1+ | Opera 12+ | Chrome |
建立String類型的一個實例;
在實例上調用指定的方法;
銷燬這個實例。
//狀況一:基本類型調用相應包裝類型的方法時自動封裝var s1 = 'some text';var s2 = s1.substring(2);//狀況二:Object構造函數根據傳入的值得類型返回基本包裝類型實例var obj = new Objetc('some text');alert(obj instanceof String); //true//狀況三:轉型函數,不一樣於使用new調用包裝類型的構造函數var value = '25';var number = Number(value); alert(typeof number); //'number'
var falseObject = new Boolean(false);var falseValue = false;alert(typeof falseObjetc); //'objetc'alert(typeof falseValue); //false
toString() : Boolean類型重寫該方法,返回字符串'true'和'false'
valueOf() : Boolean類型重寫該方法,返回基本類型true或false
valueOf() : 返回表示基本類型的數值
toString() OR toLocalString() : 返回字符串形式的數值
toFixed() : 接受一個參數,按照指定的小數位返回數值的字符串表示(IE8存在BUG)
toRxponential() : 使用e表示法接收一個參數,指定結果中的小數位數
toPrecision() : 返回固定大小格式或指數形式,接受一個參數,表示數值的全部數組位數(不包括指數部分)
var num = 10.005;alert(num.toFixed(2)); //'10.01'alert(num.toExponential(2)); //'1.00e+1'alert(num.toPrecision(2)); //'10'
length : 表示字符串中包含的字符數量
charAt() : 以單字符字符串的形式返回給定位置的字符
charCodeAt() : 以字符編碼的形式返回給定位置的字符的字符編碼
stringObj[num] : (ECMAScript 5)使用方括號加數字索引來訪問字符串的特定字符
var stringValue = 'hello world';alert(stringValue.charAt(1)); //'e'alert(stringVlaue.charCodeAt(1)); //'101'alert(stringVlaue[1]);
concat() : 將多個字符串拼接起來,返回拼接獲得的心字符串
var stringValue = 'hello';var result = StringValue.concat('world', '!');alert(result); //'hello world!'alert(stringValue); //'hello'
slice(startIndex, [endIndex]) : 返回從startIndex到endIndex(不包括,若是不指定默認到字符串結尾);參數爲負數與字符串的長度相加
substr(startIndex, subLen) : 返回從startIndex開始長度爲subLen的子串;第一個參數爲負加上字符串的長度,第二個爲負轉爲0(IE8存在BUG)
substring(startIndex, [endIndex] : 返回從startIndex到endIndex(不包括,若是不指定默認到字符串結尾),將全部負值轉爲0
//正值var stringValue = 'hello world';alert(stringVlaue.slice(3)); //'lo world'alert(stringValue.substring(3)); //'lo world'alert(stringValue.substr(3)); //'lo world'//負值alert(stringVlaue.slice(3, 7)); //'lo w'alert(stringValue.substring(3, 7)); //'lo w'alert(stringValue.substr(3, 7)); //'lo worl'
indexOf(item,[startIndex]) : item{string} 從一個字符串中搜索第一個給定的子字符串,[startIndex]指定開始搜索的位置,返回子字符串的位置(沒有返回-1)
lastIndexOf(item) : 從後往前搜索,其它同上
var stringValue = 'hello world';alert(stringValue.indexOf('o', 6)); //7alert(stringValue.lastIndexOf('0', 6)); //4
var stringValue = ' hello world ';var trimmedStringVakue = stringValue.trim();alert(stringValue); //' hello world 'alert(trimmedStringValue); //'hello world'
IE9+ | Firefox3.5+ | Safari5+ | Opera10.5+ | Chrome |
trimLeft()
trimRight()
Firefox3.5+ | Safari5+ | Chrome8+ |
toLowerCase() : 轉換成小寫
toLocalLowerCase() : 轉換成小寫(只針對特定地區的實現)
toUpperCase() : 轉換成大些
toLocalUpperCase() : 轉換成大寫(只針對特定地區的實現)
match([正則表達式|RegExp對象]) : 本質上與調用EegExp.exec()相同,返回一個數組,數組的第一項是與整個模式匹配的字符串,以後的每一項保存着與正則表達式中的捕獲組匹配的字符串。
var text = 'cat, bat, sat, fat';var pattern =/.at/;//與pattern.exec(text)相同var matches = text.match(pattern);alert(matches.index); //0alert(matches[0]); //'cat'alert(pattern.lastIndex); //0
search([正則表達式|RegExp對象]) : 返回字符串中第一個匹配項的索引,沒有返回-1。該方法始終從字符串開頭向後查找模式。
var text = 'cat, bat, sat, fat';var pos = text.search(/at/);alert(pos); //1
replace([正則表達式|RegExp對象], [字符串|函數]) : 若是第一個參數是字符串,只會替換第一個字符串;若是要替換全部子字符串就要提供一個正則表達式,並制定全局(g)標誌。第二個參數若是是字符串,還可使用一些特殊的字符序列。
var text = 'cat, bat, satm fat';var result = text.replace('at', 'ond');alert(result); //'cond, bat, sat, fat'result = text.replace(/at/g, 'ond');alert(result); //'cond, bond, sond, fond'
var text = 'cat, bat ,sat, fat';result = text.replace(/(.at)/g, 'word{$1}');alert(result); //word(cat), word(bat) ,word(sat), word(fat)
function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match, pos, originalText){ switch(match){ case '<': return '$lt;'; case '>': return '>'; case '&': return '&'; case '\"': return '"'; } });}alert(htmlEscape('<p class="greeting">Hello world!</p>')); //<p class=$quot;greeting">Hello world!</p>
split(stringValue, [arrarLength]) : 基於指定的分隔符將一個字符串分割成爲多個子字符串,並將結果放在一個數組中。可使用正則表達式(因瀏覽器而異)
var colorText = 'red, blue, green , yellow';var colors1 = colorText.split(','); //['red', 'blue', 'green', 'yellow']var colors2 = colorText.split(',', 2); //['red', 'blue']var colors3 = colorText.split(/[^\,] +/); //["", ",", ",", ",", ""]
若是字符串在字母表中應該排在字符串參數以前,則返回一個負數(大部分狀況下是-1)
若是字符串等於字符串參數,返回0;
若是字符串在字母表中應該排在字符串參數以後,返回一個整數(大部分時候是1).
var stringValue = ''yellow;alert(stringValue.localeCompare('brick')); //1alert(stringValue.localeCompare('yellow')); //0alert(stringValue.localeCompare('zoo'));
alert(String.fromCharCode(104, 101, 108, 111)); //'hello'
encodeURI() : 對整個URI進行編碼,用特殊的UTF-8編碼替換全部無效的字符。不會對自己屬於URI的特殊字符進行編碼,例如冒號、正斜槓、問號和井字號。
encodeURIComponent() : 對URI的某一段進行編碼,會對它發現的任何非標準字符進行編碼。(更經常使用,應爲實踐中更多隻對查詢字符串參數進行編碼)
var uri = 'http://www.wrox.com/illegal value.htm#start ';//'http://www.wrox.com/illegal%20value.htm#start'alert(encodeURI(uri));//'http%3A%2F%2Fillegal%20value.htm%23start'alert(encodeURIComponent(uri));
decodeURI() : 解碼encodeURI()編碼的URI
decodeURICompoment() : 解碼encodeURIComponebt()編碼的URI
var uri = 'http%3A%2F%2Fillegal%20value.htm%23start';//http%3A%2F%2Fillegal%20value.htm%23startalert(decodeURI(uri));//http://www.wrox.com/illegal value.htm#startalert(decodeURIComponent(uri));
經過eval()執行的代碼被認爲是包含該次調用的執行環境的一部分,具備與執行環境相同的做用域鏈;
只在eval()執行的時候建立,沒有聲明提高;
嚴格模式先在外部訪問不到eval()中建立的任何變量和函數。
var msg = 'hello world';eval('alert(msg);'); //'hello world'
//沒有給函數明確指定this值得狀況下,不管是經過將函數添加爲對象的方法//仍是調用call()或apply(),this值等於Global對象var global = function(){ return this;}();
//參數中的最大值var max = Math.max(3, 54, 32, 16);alert(max); //54var min = Math.min(3, 54, 32, 16);alert(min); //3//數組中的最大值var values = [1, 2, 3, 4, 5, 6];max = Math.max.apply(Math, values);
Math.ceil() : 執行向上舍入
Math.floor() : 執行向下舍入
Math.round() : 四捨五入
function selectFrom(lowerValue, upperValue){ var choices = upperValue - lowerValue + 1; return Math.floor(Math.random() * choices + lowerValue);}var num = selectFrom(2,10);alert(sum); //介於2和10之間(包含)的一個數