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

String.prototype.trim()

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

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

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);

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()); //

ECMAScript5的其它新特性的更多相关文章

  1. ECMAScript5新特性总结

    虽然ECMAScript5早就成为标准推出来了,但之前因为一直用的是ECMAScript3,并且工作中总是要求兼容IE的低版本,所以用的比较少.如今市场上大多数浏览器都能兼容ECMAScript5(I ...

  2. ECMAScript和JavaScript的区别,ECMAScript发展更新历史,ECMAScript5和ECMAScript6的新特性及浏览器支持情况,ECMAScript 5/ECMAScript 2015正式发布

    ECMAScript和JavaScript的区别 ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会.欧洲计算机制造商协会是 ...

  3. ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  4. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  5. ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况

    ECMAScript简介: 它是一种由Ecma国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,javascript在它基础上经行了自己的封装.但通常来说,术语ECMAScript和java ...

  6. javascript004_ECMA5数组新特性

    •对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf      lastIndexOf –迭代方法:every  filter   forEach   some   ...

  7. [转]ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  8. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  9. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

随机推荐

  1. 再牛逼的梦想,也抵不住SB似的坚持

    说起梦想,哪都是好几年前的事了.自从毕业之后,梦想不知道去哪了.可能一次次的失败,找不到了梦想的方向了吧! 自从毕业去了深圳,为了能够在这个城市安稳下来,白天正常上班晚上在街上摆地摊给人下载音乐和电影 ...

  2. 2016某知名互联网公司PHP面试题及答案

    1 字符串"\r","\n","\t","\x20"分别代表什么 答案: "\r"代表的含义是: 在 ...

  3. JS-字符串操作-替换

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  4. 浅谈struts2之chain

    转自:http://blog.csdn.net/randomnet/article/details/8656759 前一段时间,有关chain的机制着实困绕了许久.尽管网上有许多关于chain的解说, ...

  5. Java 第18章 多态

    18 章  --> 多态 继承: extends 抽象类 abstract (限制类的实例化) 抽象方法 public abstract void show(); //抽象方法只有方法的声明,没 ...

  6. java时区问题的一个坑

    事情是这样的,前台传过去一个日期字符串,就像2016/12/15 00:00,2016/12/15 23:59类似的格式,但每次从日志平台查日志查询的时间范围都不对,而是提前了一天. 原因是在java ...

  7. MyBatis SQL动态装配

    MyBatis的方便在于可以配置动态SQL,通过过滤器进行动态装配.在刚开始使用中,遇到不少问题,其中update语句也需要动态装配,核心在于DAO层要与.xml文件中的语句和变量名要匹配.例如: D ...

  8. 提取c#代码文件中的方法块

       此方法是取C#文件里面的方法块,并删除缩进符,感觉写得还是比较容易懂的,所以收藏下,以便将来用到. private static string GetCodeBlock(string allCo ...

  9. C#的对象赋值

    例如 Class A {       int x = 0;       int y = 0; }   public void test() {       A test1 = new A( );   ...

  10. AutoLayout - VFL

    其实很早就像整理出一份VFL的总结出来,觉得有很多东西可以写,但是真正去总结的时候发现,VFL也并没有很多东西,其实应该是在布局的过程中直接用VFL语句思考的过程比较难以形成,多数布局问题其实是在实际 ...