ECMAScript5的其它新特性
之前两篇博客 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的其它新特性的更多相关文章
- ECMAScript5新特性总结
虽然ECMAScript5早就成为标准推出来了,但之前因为一直用的是ECMAScript3,并且工作中总是要求兼容IE的低版本,所以用的比较少.如今市场上大多数浏览器都能兼容ECMAScript5(I ...
- ECMAScript和JavaScript的区别,ECMAScript发展更新历史,ECMAScript5和ECMAScript6的新特性及浏览器支持情况,ECMAScript 5/ECMAScript 2015正式发布
ECMAScript和JavaScript的区别 ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会.欧洲计算机制造商协会是 ...
- ECMAScript5 Object的新属性方法
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况
ECMAScript简介: 它是一种由Ecma国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,javascript在它基础上经行了自己的封装.但通常来说,术语ECMAScript和java ...
- javascript004_ECMA5数组新特性
•对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf lastIndexOf –迭代方法:every filter forEach some ...
- [转]ECMAScript5 Object的新属性方法
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
随机推荐
- J2EE之oracle、mysql存储过程调用
最近几天在研究hibernate.JPA对存储过程的调用,主要是针对有返回结果集的存储过程的调用方法,个人感觉存储过程是个好东西,虽然说heibernate对数据访问封装的比较不错,再加上他的缓存机制 ...
- tomcat使用线程池配置高并发连接
1:配置executor属性打开/conf/server.xml文件,在Connector之前配置一个线程池:[html] view plain copy<Executor name=" ...
- STL 跨模块 调用 异常 解决
本文为转载别人的,以作收藏之用 百度了一天,现在把结论放上边: 1.不要用STL(std::string属于STL)来跨模块传输数据,例如:dll(so)之间,dll(so)和exe(elf)之间. ...
- MySQL Create Table创建表
表的创建命令需要: 表的名称 字段名称 定义每个字段(类型.长度等) 语法 下面是通用的SQL语法用来创建MySQL表: CREATE TABLE table_name (column_name co ...
- C# System.Timers.Timer的一些小问题?
比如设置间隔时间是 1000msSystem.Timers.Timer mytimer = new System.Timers.Timer(1000);问题若响应函数执行的时间超过了 1000 ms, ...
- C# 基础(7)--线程
进程与线程 一个程序就是一个进程,进程包含线程,多个线程之间可以“并发”执行(确切的说是不停地切换),CPU是跟线程打交道的. 线程是程序的一个执行流,每个线程都有之间专有的寄存器(栈指针.程序计数器 ...
- 18.safari 安装后flash还是提示安装 flash,视频不能播放
第一步: safari---->偏好设置(首先安装最新Mac adobe flash) 第二步: 第三步:点击进入 第四步:再次打开safar,大功告成!
- Sass的学习
第一章:Sass简介 一. 什么是CSS预处理器 定义:CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用 ...
- JAVA SSH 框架介绍
SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架, ...
- ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...