ECMAScript5的其它新特性


之前兩篇博客 ECMAScript5 Object的新屬性方法ECMAScript5 Array新增方法,分別介紹了ECMAScript5對Object和Array的拓展,這兩個對象最常用,而且改動比較多,剩下的對象拓展比較少

String.prototype.trim()

這是字符串的一個實例方法,用於去除字符串首尾的空白符(不只是空格,還有tab、垂直制表符啊神馬的)和換行符,終於不用自己用正則表達式寫了,這個方法返回trim后結果,不改變原字符串值

var s = '    123 \n';
        console.log(s.length);//6
        console.log(s.trim());//123
        console.log(s.trim().length);//3
        console.log(s); //    123 
        console.log(s.length); //6

Function.prototype.bind(thisArg,[,arg1[,arg2,…]])

Function.prototype.bind返回一個把內部this設為thisArg的方法,讀起來很繞,其實就是,返回一個新方法,這個方法內部的this是參數thisArg

<div id="test">Click Here</div>
var handler = {
            message: 'This is a test',
            click: function () {
                alert(this.message);
            }
        };
document.getElementById('test').onclick = handler.click;

如果這樣綁定div的click事件處理程序,大家都會看出來,點擊的時候彈出來的對話框內容是undefined,因為執行的時候this是window,我們需要一定的技巧才可以處理此事,達到預期效果,但是使用新添的bind我們可以輕松改變this

document.getElementById('test').onclick = handler.click.bind(handler);

這樣就可以達到我們預期效果了。

 

ECMAScript提供了一個全局的對象JSON,用來處理json的序列化和反序列化來實現類似於json2.js中的效果,內置的函數總比我們自己寫的要效率高一些

JSON.parse(text [,reviver])

JSON.parse用於反序列化json格式字符串為對象,第二個參數是可選的,是一個有key和value兩個參數的函數,用於過濾或者處理返回值

var jsonString = '{"name":"Byron", "age":24}';
        var jsonObj = JSON.parse(jsonString);
        console.log(typeof jsonObj); //Object
        console.log(jsonObj.name); //Byron

對一些復雜的嵌套結構也能夠勝任

var jsonString = '[{"name":"Byron", "age":24,"Books":{"B1":"Love","B2":"Good"}},{"name":"Byron", "age":24,"Books":{"B1":"Love","B2":"Good"}}]';
        var jsonObj = JSON.parse(jsonString);

image

var jsonString = '{"name":"Byron", "age":24}';

        var jsonObj = JSON.parse(jsonString, function (key, value) {
            if (typeof value == 'string') {
                return value.toUpperCase();
            } else {
                return value;
            }
        });
        console.log(jsonObj.name); //BYRON

JSON.stringify(value [, replacer [, space]])

JSON.stringify方法用於序列化json對象為字符串,最簡單的就是傳入一個json對象

var jsonObj = {
            "name": "Byron",
            "BirthDate": new Date('06/15/1989')
        };
        var jsonStr=JSON.stringify(jsonObj);
        console.log(jsonStr); // {"name":"Byron","BirthDate":"1989-06-14T16:00:00.000Z"}

可以看到在序列化Date對象的時候調用了其toJson方法,replacer是一個可選參數,有兩種情況,可以使方法或數組

方法:這個貌似很好理解,方法也有key和value兩個參數,在序列化過程中對數據進行處理,順便說說第三個參數space,這是一個分隔符,表示用什么區分開對象的每項內容,省略的話就沒有,向上面那樣是一句;數字表示所及幾個字符,大於10的按10處理;普通字符串就是把字符串附加,最大長度也是10;號可以使用\t等轉移字符

var jsonObj = {
            "name": "Byron",
            "BirthDate": new Date('06/15/1989')
        };
        var jsonStr = JSON.stringify(jsonObj, function (key, value) {
            if (typeof value == 'string') {
                return value.toUpperCase();
            } else {
                return value;
            }
         },'\t');
        console.log(jsonStr);
        /*{
            "name": "BYRON",
            "BirthDate": "1989-06-14T16:00:00.000Z"
        } */

數組:主要起一個過濾作用,只會序列化對象中屬性名存在於數組元素的鍵值對

var jsonObj = {
            "name": "Byron",
            "BirthDate": new Date('06/15/1989'),
            "age":24,
            "sex":"male"
        };
        var arr = ['name', 'age'];
        var jsonStr = JSON.stringify(jsonObj,arr,3);
        console.log(jsonStr);
        /*{
            "name": "BYRON",
            "age": 24
        } */

BirthDate和sex屬性不在數組arr中,沒有被序列化

支持ISO類型的Date

在之前的JavaScript中可以使用以下幾種方式創建Date實例

new Date() //Date {Fri Aug 02 2013 16:50:33 GMT+0800 (China Standard Time)}
        new Date(milliseconds)  //Date {Fri Aug 02 2013 16:53:26 GMT+0800 (China Standard Time)}
        new Date("2013/08/02") //Date {Fri Aug 02 2013 00:00:00 GMT+0800 (China Standard Time)}
        new Date("08/02/2013") //Date {Fri Aug 02 2013 00:00:00 GMT+0800 (China Standard Time)}
        new Date(year, month, day, hours, minutes, seconds, ms)

ECMAScript5為其添加了ISO-8601格式的支持,可以為構造函數傳一個ISO格式時間字符串

console.log(new Date("1970-01-01T00:00:00.000Z")); //Thu Jan 01 1970 08:00:00 GMT+0800 (China Standard Time)

同時添加了一個toISOString方法

console.log(new Date().toISOString()); // 2013-10-07T05:54:38.743Z

Date.prototype.toJSON()

從Date類型轉成json的方法,序列化的時候用

console.log((new Date).toJSON()); // 2013-10-07T06:06:29.288Z

Date.now()

獲取當前的時間戳

console.log(Date.now()); // 1381125894410


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM