- 浏览: 430435 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
IThead:
纠结了几天,用了你的方法,现在解决了,谢谢!
Eclipse 写Javascript卡死问题 -
Rubicon__:
你好,我在运用PageWidget这个类时,出现第一页翻到第二 ...
android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算) -
lionios:
如果不显示printDialog,则打印出来的是空白页,请问你 ...
Print打印机例子 -
rayln:
weiqiulai 写道哥们儿,我怎么没有看到监控队列的配置和 ...
JMS监听MQ实例 -
weiqiulai:
哥们儿,我怎么没有看到监控队列的配置和代码?
JMS监听MQ实例
转载: http://www.cnblogs.com/winter-cn/archive/2012/02/28/2371415.html
1. strict模式
strict模式目前无人实现,但是按标准的说法strict模式是非strict的完全子集
strict模式究竟是什么意思?很多同学认为使用strict模式是强迫使用良好的代码风格,我的意见是strict不是良好风格的代码而是高效的代码。通过使用strict模式,编译器有了把变量优化成内存地址的能力。
具体限制为
eval中不再能声明变量,声明的函数将会变成全局的
var定义只能在函数级,if、for、while、switch等不能有var定义
不能使用with语句
不能使用arguments.callee
普通的函数调用中this是null
试图改变只读属性将会抛出异常
delete失败会抛出异常
arguments不再和形参绑定
函数不能有同名参数
使用的方法是用一个strict声明,这个声明是一个字符串表达式(为了兼容非strict模式),例如
strict声明只能是'use strict'和"use strict",包括转义、字符串断行在内的任何改动都不会被认为是strict声明
'use strict';
eval("var a=1;")
alert(a);
这里的strict声明导致代码全局变成strict模式,再无法使用非strict模式
strict也可以作用于函数级别, John Resig的建议很不错
2. 数组
数组变化不小,有一些用起来蛮顺手的扩展:
Array.prototype.indexOf, Array.prototype.lastIndexOf 正向查找和逆向查找,这个没什么好说的,看名字都知道是干什么的
Array的集合操作一直深得月同学喜爱,这下终于成了标准
Array.prototype.every:检查一个数组里所有元素都符合某个条件 数理逻辑中的任意符号 ∀(符号看不到的换宋体)
Array.prototype.some : 检查一个数组里是否存在元素符合某个条件 数理逻辑中的存在符号 ∃
Array.prototype.forEach : 这个就是普通的遍历了
Array.prototype.map : 对一个数组每一个元素执行函数,把所有返回值做为一个数组返回
Array.prototype.filter : filter从一个数组中选出符合条件的元素,不过并不改变原来的数组
迭代操作
Array.prototype.reduce 和Array.prototype.reduceRight 提供了迭代操作
想想吧,用Array.prototype.forEach怎么求一个数组的所有元素的和?无论如何,你都需要用到一个外部变量。而Array.prototype.reduce更适合一些
3.Function.prototype.bind
对大多数JSer来说,Function.prototype.bind并不陌生了,这个prototype.js中的著名函数终于成为标准的一部分,并且有了更佳的内部实现方式。用法还是老样子
4.String.prototype.trim
这个就是方便了,去掉字符串两端空格
5. Date.now()是一个新的函数,得到当前的time stamp
这个是一个非常小的变动 实际相当于new Date().getTime()
6.原型式编程
Object.getPrototypeOf 可以获取一个对象的原型(注意,一个"对象"的原型,不是函数的prototype属性,即标准中所说的[[prototype]]) 这个函数的作用大致相当于SpiderMonkey的 __proto__属性,区别在于这个函数是低命名污染的,而且无法set
Object.create 可以以指定原型创建对象,效果大约等同于
Object.create的第二个参数是附加在新对象上的属性,可参考第三条
有意思的是,我们终于可以创建一个原型链“干净”的对象了,不需要每个对象都继承Object.prototype
7.属性操作
Object.getOwnPropertyNames可以获取一个对象所有属性名组成的数组,包括那些不可枚举的属性,这是以前for in的替代品
Object.defineProperty是新的定义属性的方式,比起之前直接赋值,我们可以更好地控制属性的可访问性、可枚举性,大家一直期待的getter和setter也在此实现,正式成为标准:
一个只读属性的例子:
一个getter和setter的例子
不能枚举的属性(以后扩展Array就不用心惊胆颤啦):
也可以用Object.getOwnPropertyDescriptor获取一个对象的属性的"属性"
还支持一次定义好多属性Object.defineProperties 不过用处不大
8. JSON支持
JSON对象类似Math,其实就是命名空间的作用,实际只有2个函数JSON.stringify和JSON.parse
Date对象也添加了一个相关方法toJSON,像Date.now()一样,它也只是个快捷的东西
1. strict模式
strict模式目前无人实现,但是按标准的说法strict模式是非strict的完全子集
strict模式究竟是什么意思?很多同学认为使用strict模式是强迫使用良好的代码风格,我的意见是strict不是良好风格的代码而是高效的代码。通过使用strict模式,编译器有了把变量优化成内存地址的能力。
具体限制为
eval中不再能声明变量,声明的函数将会变成全局的
var定义只能在函数级,if、for、while、switch等不能有var定义
不能使用with语句
不能使用arguments.callee
普通的函数调用中this是null
试图改变只读属性将会抛出异常
delete失败会抛出异常
arguments不再和形参绑定
函数不能有同名参数
使用的方法是用一个strict声明,这个声明是一个字符串表达式(为了兼容非strict模式),例如
strict声明只能是'use strict'和"use strict",包括转义、字符串断行在内的任何改动都不会被认为是strict声明
'use strict';
eval("var a=1;")
alert(a);
这里的strict声明导致代码全局变成strict模式,再无法使用非strict模式
strict也可以作用于函数级别, John Resig的建议很不错
// 非strict代码... (function(){ "use strict"; // 用strict模式编写我们的库 })(); // 用户仍然可以自由使用非strict代码...
2. 数组
数组变化不小,有一些用起来蛮顺手的扩展:
Array.prototype.indexOf, Array.prototype.lastIndexOf 正向查找和逆向查找,这个没什么好说的,看名字都知道是干什么的
Array的集合操作一直深得月同学喜爱,这下终于成了标准
Array.prototype.every:检查一个数组里所有元素都符合某个条件 数理逻辑中的任意符号 ∀(符号看不到的换宋体)
var arr = [2,9,4,5,3,7]; var greater5 = arr.every(function(e,i){return e>5}); //是否大于5 var smaller10 = arr.every(function(e,i){return e<10}); //是否小于10 alert([greater5,smaller10]);
Array.prototype.some : 检查一个数组里是否存在元素符合某个条件 数理逻辑中的存在符号 ∃
<script> var arr = [2,9,4,5,3,7]; var smaller5 = arr.some(function(e,i){return e<5}); //是否小于5 var greater10 = arr.some(function(e,i){return e>10}); //是否大于10 alert([smaller5 ,greater10]); </script>
Array.prototype.forEach : 这个就是普通的遍历了
Array.prototype.map : 对一个数组每一个元素执行函数,把所有返回值做为一个数组返回
<script> var arr = [2,9,4,5,3,7]; var smaller5 = arr.map(function(e,i){return e<5}); //是否小于5 alert(smaller5); </script>
Array.prototype.filter : filter从一个数组中选出符合条件的元素,不过并不改变原来的数组
<script> var arr = [2,9,4,5,3,7]; var smaller5 = arr.filter(function(e,i){return e<5}); //是否小于5 alert(smaller5); </script>
迭代操作
Array.prototype.reduce 和Array.prototype.reduceRight 提供了迭代操作
想想吧,用Array.prototype.forEach怎么求一个数组的所有元素的和?无论如何,你都需要用到一个外部变量。而Array.prototype.reduce更适合一些
<script> var arr = [2,9,4,5,3,7]; var sum = arr.reduce(function(sum,e,i){return sum+e;}); //是否小于5 alert(sum); </script>
3.Function.prototype.bind
对大多数JSer来说,Function.prototype.bind并不陌生了,这个prototype.js中的著名函数终于成为标准的一部分,并且有了更佳的内部实现方式。用法还是老样子
<script> var f = function(){ return this.a + this.b}.bind({a:1,b:2}); alert(f()); </script>
4.String.prototype.trim
这个就是方便了,去掉字符串两端空格
alert(" 啦啦 ".trim());
5. Date.now()是一个新的函数,得到当前的time stamp
这个是一个非常小的变动 实际相当于new Date().getTime()
<script> alert([Date.now(),new Date().getTime()]); </script>
6.原型式编程
Object.getPrototypeOf 可以获取一个对象的原型(注意,一个"对象"的原型,不是函数的prototype属性,即标准中所说的[[prototype]]) 这个函数的作用大致相当于SpiderMonkey的 __proto__属性,区别在于这个函数是低命名污染的,而且无法set
<script> var klass = function() {} klass.prototype = {a:10}; var obj = new klass(); var proto= Object.getPrototypeOf(obj) alert(proto == klass.prototype); alert(proto.hasOwnProperty("a")); </script>
Object.create 可以以指定原型创建对象,效果大约等同于
function create(proto) { var klass = function(){} ; klass.prototype = proto; return new klass; }
Object.create的第二个参数是附加在新对象上的属性,可参考第三条
有意思的是,我们终于可以创建一个原型链“干净”的对象了,不需要每个对象都继承Object.prototype
<script> var obj=Object.create(null); alert(obj.toString); </script>
7.属性操作
Object.getOwnPropertyNames可以获取一个对象所有属性名组成的数组,包括那些不可枚举的属性,这是以前for in的替代品
<script> alert(Object.getOwnPropertyNames(Object)); </script>
Object.defineProperty是新的定义属性的方式,比起之前直接赋值,我们可以更好地控制属性的可访问性、可枚举性,大家一直期待的getter和setter也在此实现,正式成为标准:
一个只读属性的例子:
<script> var obj = {a:1}; Object.defineProperty(obj,"b",{value: 42, writable: false, configurable: true}) alert(obj.b); obj.b = 10; // 无效 alert(obj.b); </script>
一个getter和setter的例子
<script> var a=10,b; var obj = {x:1}; Object.defineProperty(obj,"c",{get:function(){return a+b}, set:function(v){b=v}}); obj.c = 3; alert(obj.c); </script>
不能枚举的属性(以后扩展Array就不用心惊胆颤啦):
<script> var obj = {a:1,c:3,d:4}; Object.defineProperty(obj,"b",{value: 42, writable: false, configurable: true, enumrable:false}); for(var p in obj) { alert(p); } </script>
也可以用Object.getOwnPropertyDescriptor获取一个对象的属性的"属性"
<script> alert(JSON.stringify(Object.getOwnPropertyDescriptor([],"length"))); </script>
还支持一次定义好多属性Object.defineProperties 不过用处不大
8. JSON支持
JSON对象类似Math,其实就是命名空间的作用,实际只有2个函数JSON.stringify和JSON.parse
<script> var jsonStr = JSON.stringify({a:10}); alert(jsonStr); var obj = JSON.parse("{\"a\":10}"); alert(obj.a); </script>
Date对象也添加了一个相关方法toJSON,像Date.now()一样,它也只是个快捷的东西
<script> alert([JSON.stringify(new Date),(new Date).toJSON()]); </script>
发表评论
-
通过Iframe进行跨域处理
2013-12-30 16:47 1057在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情 ... -
Jsonp跨域使用
2013-12-30 14:36 878Jsonp是解决跨域问题的一个办法。在jsonp:" ... -
jquery中animate对css3的用法
2013-09-16 15:37 812$('#box').animate({ textInd ... -
jquery框架实现基本原理
2013-04-26 14:40 863请看下面代码就明白了 var $ = jquery = fun ... -
最简单的拖拽效果
2013-01-28 16:46 806html5中提供了drag的效果, 通过事件可以进行拖拽元素, ... -
斜坡算法
2013-01-17 16:52 1497斜坡算法, 通过canvas画斜坡的算法, 知道这个算法后, ... -
如何创建一个Chrome应用
2013-01-08 15:48 0看附件的详细介绍 -
深入理解JavaScript的变量作用域
2012-12-20 15:39 653转载: http://www.cnblogs.com/rain ... -
Ajax访问文件获取字节流方法
2012-11-09 01:01 1626window.onload = function(){ ... -
IE的mouseover, mouseour透明颜色下的问题
2012-08-23 13:56 926在IE6,7,8,9 中,都存在一种情况, 就是如果两个Div ... -
Metro应用中Class的定义与使用
2012-08-15 11:58 851定义一个Class使用下面方法 // A simple &qu ... -
ECMAScript的getter和setter例子
2012-08-08 13:20 848在最新浏览器中调用下面方法进行测试。 var a = { ... -
解决Chrome浏览器跨域问题
2012-08-07 10:24 3125在本地快捷方式--〉右键--〉属性--〉目标--〉 C:\Us ... -
SeaJs模块化加载
2012-08-02 10:32 1109SeaJs模块化加载, 这个是国人写的一个框架, 遵循CMD模 ... -
JS- 封装、继承、多态
2012-08-01 10:08 894转载: http://www.cnblogs.com/ ... -
Node.js入门例子
2012-07-31 14:06 883Node.js是js的服务器端语言. 下载地址: http:/ ... -
KinticJs的基本用法
2012-06-11 15:42 965Kintic是html5中canvas的一个框架,效率高,包小 ... -
Prototype, Constructor的使用和理解
2012-06-05 14:00 904JavaScript中Prototype的使用和实例 < ... -
CSS3的before, after和label的for用法
2012-04-17 13:30 1877使用before和after可以用content, 结合bef ... -
JS绘图Flot应用-简单曲线图
2012-03-26 10:45 1749转载: http://www.iteye.com/topic/ ...
相关推荐
ECMAScript 5(简称ES5)是ECMAScript的一个重要版本,带来了许多新特性,这些新特性在《JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性》中被详细讨论。 ES5相对于之前版本,如ECMAScript 3(简称...
本人看过《深入浅出ES6》后把一百多页去除水分,总结成十来页的文档,方便快速入门。
随着技术的发展,新的版本不断推出,引入了许多创新特性和改进。以下是一些在ES5、ES6(也称为ES2015)以及ES7(ES2016)中的常见新特性: 1. **保留关键字**:在ES5中,有一些保留关键字如`catch`,不能用作变量名...
12. **ECMAScript5**:ECMAScript是JavaScript的标准,第五版引入了严格模式、对象字面量的改进、JSON支持、函数绑定、数组和对象的新方法等特性。 13. **函数式编程**:虽然JavaScript并非纯函数式语言,但其支持...
ECMAScript6,也称为ES2015,是JavaScript语言的一个重要版本更新,引入了许多新的特性和语法改进,使得代码更加简洁、易读。以下是一些关键的新特性及其范例: 1. **箭头函数**: 箭头函数提供了一种更简洁的函数...
本压缩包包含的是ECMAScript的三个重要版本:ECMAScript 5(ES5)、ECMAScript 6(ES6,也称为ES2015)以及ECMAScript 2018(ES2018)。这些版本在JavaScript的发展历程中扮演了关键角色,引入了许多新的特性和改进...
### ECMAScript 5 版本特性解析 #### 引言 随着互联网技术的迅猛发展,JavaScript 作为一种广泛应用于浏览器端的脚本语言,其重要性日益凸显。为了更好地满足开发者的实际需求并提高编程效率,ECMAScript 第五版...
ECMAScript 6,简称ES6,是JavaScript语言的一个重要版本更新,引入了许多新的特性和语法改进。本文将深入探讨其中两个关键特性:`let` 和 `const`。 `let` 是ES6中用于声明变量的新关键字,它解决了在ES5中`var`...
ESLint:ESLint规则详解:ECMAScript6+特性.docx
ECMAScript Second Edition javascript新特性2018年7月最新版本
ES6,全称ECMAScript 2015,是JavaScript语言的一个重要版本更新,引入了大量的新特性和语法糖,对前端开发领域产生了深远影响。 1. **变量声明** - `let` 和 `const`: ES6 引入了新的变量声明方式,`let` 用于...
5. 正则的扩展 6. 数值的扩展 7. 函数的扩展 8. 数组的扩展 9. 对象的扩展 10. Symbol 11. Set 和 Map 数据结构 12. Proxy 13. Reflect 14. Promise 对象 15. Iterator 和 for...of 循环 16. Generator 函数的语法 ...
综上所述,《ECMAScript2016标准入门(第三版)》不仅详细介绍了ES2016的新特性,而且还提供了丰富的示例帮助读者理解和应用这些特性。无论是对于初学者还是有一定经验的开发者来说,这本书都是学习ES2016不可多得的好...
随着技术的不断演进,JavaScript也在持续发展,从最初的ECMAScript 3到现在的ECMAScript 6(也被称为ES2015),它带来了许多新特性和改进,显著提升了开发者的效率和代码的可维护性。以下将详细介绍JavaScript的发展...
### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造...随着ECMAScript标准的不断演进,掌握其最新特性和最佳实践对于开发者来说至关重要。
本说明将深入探讨ECMAScript 5.1的主要特性和关键知识点。 1. **类型系统** - 基本类型:ECMAScript 5.1中有五种基本数据类型,包括Undefined、Null、Boolean、Number和String,以及一个特殊类型Object。 - 引用...
ES6之前的版本包括1、2、3、5,而没有4版,这是因为在制定ES4时,提出的特性过于激进且复杂,例如内建静态类型系统,导致最终该版本未能通过,于是标准委员会在ES4的基础上发布了较为温和的ES5版本。ES5引入了一系列...
资源名称:ECMAscript2018规范内容简介:ECMAscript 2018(第九版 JS)已于 6 月底正式发布,带来了许多新特性。ECMAscript 2018 于今年2月出炉草案,TC39 技术委员会每两个月开会一次,讨论当前...
ECMAScript,通常简称为ES,是JavaScript编程语言的标准,由欧洲计算机制造商协会...随着ECMAScript的不断演进,如ES6引入的模块系统、箭头函数、类和解构赋值等新特性,开发者需要持续学习和掌握最新的语言标准。