JavaScript高級程序設計(第三版) (5章 引用類型)

引用類型
在ECMAScript 中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒。這種數據類型不具有傳統的面嚮對象語言所支持的類和接口等基本結構。引用類型有時候也被稱爲對象定義,由於他們描述的是一類對象所具備的屬性和方法。

5.1    Object類型html

5.2    Array類型
    特色:
  • 每一項能夠保存任何類型的數據;
  • 大小能夠動態調整
  • length大小可變(最大值4294967295)
     兩種建立方式:
     一:經過構造函數建立
//不指定大小
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, ];
    5.2.1    檢測數組
方式一:instanceof
if(value instanceof Array){
    //對數組進行某些操做
}
     侷限性
    不一樣全局執行環境存在不一樣版本的Array構造函數。會獲得不是Array的結論。
方式二:Array.isArray()
[ECMAScript 5]
ifArray.isArray(value)){
    //對數組執行某些操做
}
IE9+ Firefox4+ Safari5+ Opera10.5+ Chrome
    5.2.2    轉換方法
  • toLocalString()        調用數組每一項的toLocalString()方法,將返回的每一個字符串拼接成一個以逗號分隔的字符串。
  • toString()    :    (隱式轉換默認調用)調用數組每一項的toString()方法,將返回的每一個字符串拼接成一個以逗號分隔的字符串。
  • valueOf()    :    返回的仍是數組。
  • join(【】)    :    指定轉換成字符串時使用的分隔符,默認或設爲undefined將使用','
        BUG(傳入undefined IE7-會錯誤地使用'undefined'做爲分隔符)
    注意:    某一項爲null或undefined時經過上述方法將返回空字符串。
    5.2.3    棧方法(數組末尾做爲棧頂)
push()    :    接受任意數量的參數,逐個添加到數組末尾,並返回修改後數組的長度
**param{any} 要添加到數組末尾的值或引用
**...
**return {Number} 修改後數組的長度
pop()     :    從數組末尾移除最後一項,減小數組的length值,而後返回移除的項
**return {any} 移除的項
var colors = new Array();    //建立一個數組
var count = colors.push('red', 'green');    //推入兩項
alert(count);    //2
 
count = colors.push(black);    //推入另外一項
alert(count);    //3
 
var item = colors.pop();    //取得最後一項
alert(item);    //'black'
alert(colors.length);    //2
 
    5.2.4     隊列方法(FIFO )
         由後向前移動:    shift()和push()配合實現
         由前日後移動:   pop()和unshift()
  • shift()    :    移除數組中的第一項並返回該項,同時將數組長度減一。
var colors = new Array();
var count = colors.push('red', 'green');    //推入兩項
alert(count);    //2
 
count = colors.push('black');    //推入另外一項
alert(count);    //3
 
var item = colors.shift();    //取得第一項
alert(item);    //'red'
alert(colors.length);    //2
  • unshift()    :    在數組前端添加任意個項兵返回新數組的長度。
        BUG:    IE7-的unshift()方法老是返回undefined而不是數組的新長度,IE8兼容模式下返回正確。
var colors = new Array();
var count = colors.unshift('red', 'green');    //推入兩項
alert(count);    //2
 
count = colors.unshift('black');    //推入另外一項
alert(count);    //3
 
var item = colors.pop();    //取得最後一項
alert(item);    //'green'
alert(colors.length);    //2
 
    5.2.5    重排序方法
  • reverse()    :    反轉數組項的順序
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values);    //5,4,3,2,1
sort()    :    接受一個比較函數函數來排序,默認按升序排列(調用每一個數組項的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
    5.2.6    操做方法
  • concat()    :    基於當前數組中設爲全部項建立一個新數組
  1. 建立當前數組的一個副本;
  2. 將接收到的參數[數組|元素][每一項分別添加|添加]到副本的尾部;
  3. 返回新構建的數組。
         特色:不會影響原始數組
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,返回的數組中只包含一項
 
     5.2.7    位置方法(2  )
     ECMAScript 5
  • indexOf()    :    從前日後查找;兩個參數, 要查找的項【和表示查找起點位置的索引】,返回查找的項在數組中的位置(沒找到返回-1)
  • lastIndexOf()    :    從末尾向前查找,其它同上
IE9+ Firefox2+ Safari3+ Opera9.5+ Chrome
    5.2.8    迭代方法(5)
     [ ECMAScript 5]
         共同點:    
  • 兩個參數
    • 參數一:在每一項上運行的函數
    • 參數二:運行函數的做用於對象(影響 this 的值)
  • 傳入函數中的方法包含三個參數
      • 參數一:數組項的值
      • 參數二:該項在數組中的索引下標
      • 參數三:數組對象自己
    • 都不會修改數組中包含的值。
  • every()        對數組中的每一項給定函數,每一項都返回true,則返回true
  • filter()    :    對數組中的每一項給定函數,返回會返回true的項組成的數組
  • forEach()    :    對數組中的每一項給定函數,沒有返回值
  • map()    :    對數組中的每一項給定函數 ,返回每次函數調用的結果組成的數組
  • some()    :    對數組中的每一項給定函數,只要有一項返回true,就返回true
IE9+ Firefox2+ Safari3+ Opera9.5+ Chrome  
  5.2.9    縮小方法(2個)
    【ECMAScript 5】
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
5.3    Date類型
    new Date([日期的毫秒數或表示日期的字符串或GTM日期參數]).
    *param{String}
        或
    *param{Number}
        或
第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'));
     ECMAScript-262沒有定義支持哪一種日期格式,一般因地區而異。
    (美國地區)
日期格式 例子 兼容性
'月/日年' '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:53
var 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
    5.3.1     繼承(重寫)的方法
         注意:不一樣瀏覽器差別很是大
  • new Date().toString()
        返回帶有時區信息的日期和時間。
  • new Date().toLocalString()
        按照瀏覽器設置的地區相適應的格式返回日期和時間,包含AM或PM但不包含時區。
  • new Date().valueOf()
        返回毫秒數。
    5.3.2    日期格式化方法(對象)
         注意:沒有哪個方法能在用戶界面顯示一致的信息
  • toDateString()
  • toTimeString()
  • toLocalDateString()
  • toLocalTimeString()
  • toUTCString()    (toGTMString()不推薦)
    5.3.3    日期/時間組件方法

5.4    RegExp實例屬性
     5.4.1    RegExp實例屬性
    5.4.2    RegExp實例方法    
    5.4.3    RegExp構造函數屬性
    5.4.4    模式的侷限性
5.5    Function類型(函數是對象,函數名是指針)
  • 函數聲明
/*
* 特色
* 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;
};
      5.5.1    沒有重載(深刻理解)
    5.5.2    函數聲明與函數表達式
    5.5.3    做爲值得函數
/**
* 對數組對象進行排序的比較函數
* @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);    //Nicholas
 
data.sort(createComparisonFunction('age');
alert(data[0].name);    //Zachary 
    5.5.4    函數內部屬性
  • 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();
    5.5.5    函數屬性和方法
  • length    :    函數但願接收的命名參數的個數
function sayName(name){
    alert(name);
}
function sum(num1, num2){
    return num1 + num2;
}
function sayHi(){
    alert('hi');
}
 
alert(sayName.length);    //1
alert(sum.length);    //2
alert(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));    //20
alert(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
bind()    :     (ECMAScript 5)會建立一個函數實例並將this傳遞給bind()函數
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
5.6    基本包裝類型
特色:自動封裝與解封裝
  1. 建立String類型的一個實例;
  2. 在實例上調用指定的方法;
  3. 銷燬這個實例。
//狀況一:基本類型調用相應包裝類型的方法時自動封裝
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'
    5.6.1    Boolean類型(不推薦使用)
var falseObject = new Boolean(false);
var falseValue = false;
alert(typeof  falseObjetc);    //'objetc'
alert(typeof falseValue);    //false
  • toString()    :    Boolean類型重寫該方法,返回字符串'true'和'false'
  • valueOf()     :    Boolean類型重寫該方法,返回基本類型true或false  
    5.6.2    Number類型
  • 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'
    5.6.3    String類型
  • length    :    表示字符串中包含的字符數量
     1.     字符方法(都接受一個參數:基於0的字符位置)
  • charAt()    :    以單字符字符串的形式返回給定位置的字符
  • charCodeAt()    :    以字符編碼的形式返回給定位置的字符的字符編碼
  • stringObj[num]    :    (ECMAScript 5)使用方括號加數字索引來訪問字符串的特定字符
var stringValue = 'hello world';
alert(stringValue.charAt(1));    //'e'
alert(stringVlaue.charCodeAt(1));    //'101'
alert(stringVlaue[1]);
     2.     字符串操做方法
  • 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'
 
     3.     字符串位置方法
  • indexOf(item,[startIndex])    :    item{string} 從一個字符串中搜索第一個給定的子字符串,[startIndex]指定開始搜索的位置,返回子字符串的位置(沒有返回-1)
  • lastIndexOf(item)    :    從後往前搜索,其它同上
var stringValue = 'hello world';
alert(stringValue.indexOf('o', 6));    //7
alert(stringValue.lastIndexOf('0', 6));    //4
     4.     trim()方法    :    [ECMAScript 5],建立一個字符串的副本,刪除前置及後綴的全部空格,而後返回結果。
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+
     5.     字符串大小寫轉換方法
  • toLowerCase()    :    轉換成小寫
  • toLocalLowerCase()    :    轉換成小寫(只針對特定地區的實現)
  • toUpperCase()    :    轉換成大些
  • toLocalUpperCase()    :    轉換成大寫(只針對特定地區的實現)
     6.     字符串的模式匹配方法
  • match([正則表達式|RegExp對象])    :    本質上與調用EegExp.exec()相同,返回一個數組,數組的第一項是與整個模式匹配的字符串,以後的每一項保存着與正則表達式中的捕獲組匹配的字符串。
var text = 'cat, bat, sat, fat';
var pattern =/.at/;
 
//與pattern.exec(text)相同
var matches = text.match(pattern);
 
alert(matches.index);    //0
alert(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(/[^\,] +/);    //["", ",", ",", ",", ""]
7.     localCompare()方法    :    比較字符串
  • 若是字符串在字母表中應該排在字符串參數以前,則返回一個負數(大部分狀況下是-1)
  • 若是字符串等於字符串參數,返回0;
  • 若是字符串在字母表中應該排在字符串參數以後,返回一個整數(大部分時候是1).
var stringValue = ''yellow;
alert(stringValue.localeCompare('brick'));    //1
alert(stringValue.localeCompare('yellow'));    //0
alert(stringValue.localeCompare('zoo'));
 
     8.     fromCharCode()方法    :    接收一或多個字符編碼,而後將它們轉換成一個字符串。與實例方法chaeCodeAt()執行相反的操做。
alert(String.fromCharCode(104, 101, 108, 111));    //'hello'
     9.     HTML方法
5.7    單體內置對象
    由ECMAScript實現提供的、不依賴數組環境的對象,這些對象在ECMAScript程序執行以前就已經存在了。包括:Object、Array和String.
     5.7.1     Global對象
        事實上沒有所謂全局變量或全局函數,全部不屬於任何其餘對象的屬性和方法,最終都是它的對象和方法。包括isNaN()、isFinnite()、parseInt()以及parseFloat(),其它方法以下:
        1.    URL編碼方法
  • 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%23start
alert(decodeURI(uri));
 
//http://www.wrox.com/illegal value.htm#start
alert(decodeURIComponent(uri));
    ECMA-262第三版廢棄的解碼編碼方法    :     escape()、unescape()
    注意:只能正確編碼ASCII字符
         2.     eval()方法     :    該方法至關於一個完整的ECMAScript解析器
  • 經過eval()執行的代碼被認爲是包含該次調用的執行環境的一部分,具備與執行環境相同的做用域鏈;
  • 只在eval()執行的時候建立,沒有聲明提高;
  • 嚴格模式先在外部訪問不到eval()中建立的任何變量和函數。
var msg = 'hello world';
eval('alert(msg);');    //'hello world'
         3.     GLobal對象的屬性

         注意:ES5明確禁止給undefined、NaN和Infinity賦值
         4.     window對象     :    在瀏覽器中Global對象是做爲window對象的一部分來實現的
//沒有給函數明確指定this值得狀況下,不管是經過將函數添加爲對象的方法
//仍是調用call()或apply(),this值等於Global對象
var global = function(){
    return this;
}();
 
      5.7.2    Math對象
         1.     Math對象的屬性
         2.     min()和max()方法
//參數中的最大值
var max = Math.max(3, 54, 32, 16);
alert(max);    //54
 
var min = Math.min(3, 54, 32, 16);
alert(min);    //3
 
//數組中的最大值
var values = [1, 2, 3, 4, 5, 6];
max = Math.max.apply(Math, values);
         3.     舍入方法
  • Math.ceil()    :    執行向上舍入
  • Math.floor()    :    執行向下舍入
  • Math.round()    :    四捨五入
        4.    random()方法    :    返回介於0-1之間的一個隨機數
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之間(包含)的一個數
         5.     其餘方法

 
5.8    小結
相關文章
相關標籤/搜索