zoukankan      html  css  js  c++  java
  • ECMAScript5的其它新特性

    之前两篇博客 ECMAScript5 Object的新属性方法ECMAScript5 Array新增方法,分别介绍了ECMAScript5对Object和Array的拓展,这两个对象最常用,而且改动比较多,剩下的对象拓展比较少

    String.prototype.trim()

    这是字符串的一个实例方法,用于去除字符串首尾的空白符(不只是空格,还有tab、垂直制表符啊神马的)和换行符,终于不用自己用正则表达式写了,这个方法返回trim后结果,不改变原字符串值

    var s = '    123 
    ';
            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;号可以使用 等转移字符

    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;
                }
             },'	');
            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
  • 相关阅读:
    Sql Server Profiler使用
    用PowerDesign反向生成数据库Sql语句问题
    使用PowerDesign15反向生成数据库
    离线安装Sharepoint工具
    开发Windows服务
    Windows Server 2008 R2 安装域
    Entity Framework执行Sql语句返回DataTable
    GO 学习资源收集
    Ubuntu常用命令大全
    MVC MVC3中 ViewBag、ViewData和TempData的使用和区别 【转】
  • 原文地址:https://www.cnblogs.com/dolphinX/p/3354319.html
Copyright © 2011-2022 走看看