SlideShare a Scribd company logo
ECMAScript
Edition5 小试
张立理
zhanglili01@baidu.com

                  感谢教主
什么是ECMAScript
由欧洲计算机制造商协会(ECMA)通过ECMA-262标准化的脚
本程序设计语言
• Javascript
• Jscript
• ActionScript

版本        发表日期    描述
3         1999年12月 我们所认识的版本
4         放弃      关于语言的复杂性出现分歧,被放弃
5         2009年12月 增加多项改进
Harmony   社区讨论中   将以ECMAScript6发布
现有支持度
 Firefox4+ | Chrome11+ | IE10PP2
 NodeJS(V8)
 Safari5 – 仅部分
 Opera11.5 – 基本无实现


   http://test262.ecmascript.org/
   http://kangax.github.com/es5-compat-table/
ECMAScript5特性
 新增、改进的API
 更严谨、强大的语法
 全新的概念
 更多的细节
新增API
   Object.create                        Date.now
   Object.defineProperty                Array.isArray
   Object.getPrototypeOf                JSON
   Object.keys                          Function.prototype.bind
   Object.seal                          String.prototype.trim
   Object.freeze                        Array.prototype.indexOf
   Object.preventExtensions             Array.prototype.lastIndexOf
   Object.isSealed                      Array.prototype.every
   Object.isExtensible                  Array.prototype.some
   Object.getOwnPropertyDescriptor      Array.prototype.forEach
   Object.getOwnPropertyNames           Array.prototype.map
   Date.prototype.toISOString           Array.prototype.reduce
                                         Array.prototype.reduceRight
先来一个题
 varx = 123;
 delete x; // ??


 window.y   = 123;
 delete y; // ??


 Why?
属性描述符
 是用于解释某一个被命名的属性具体操作规则
  的特性集。
 属性描述符中的对应每个字段名都会有一个值。
  其中任何一个字段都可以缺省或显式的设置。
 属性描述符还会被进一步以字段的实际用途来
  分类成--数据属性描述符和访问器属性描述符。
数据属性 & 访问器属性
 Data Descriptor      Accessor Descriptor
 [[Value]]           [[Get]]
 [[Writable]]        [[Set]]
 [[Enumerable]]      [[Enumerable]]
 [[Configurable]]    [[Configurable]]
数据属性 & 访问器属性
 Object.defineProperty(o,   p, descriptor)
数据属性 & 访问器属性
 Getter   & Setter in Object Initializer
再来看一段代码



      javascript is prototype based
      class oriented programming
      language
      Why Class?
彻底基于原型
 很多人觉得javascript不舒服、恶心、语法怪
 异,是因为你学的第一个语言不是javascript,
 因为你接触的第一种面向对象的实现方案不是
 基于原型,而你又没有胆量完全抛开以前的所
 有,把javascript作为一门全新的、和java和c
 完全没有关系的语言来看,承认自己的无知,
 而后如新生婴儿一般求知。
彻底基于原型
 Object.create(proto,   properties)
                            •   Pros:
                            •   No class, No new
                            •   Property Descriptor
                            •   prototype based

                            • Cons:
                            • No constructor
彻底基于原型
 继承?
一些细节
 varo = Object.create(null);
 console.log(o + ‘ is created’);
                             What happens?


 ToPrimitive
            -> toString -> null.toString
 没有任何规范说对象的[[prototype]]不能为
  null或undefined
 Object.prototype | Function.prototype
对象的内部属性[[Extensible]]
 Object.preventExtensions(o)
密封 & 冻结
 Object.seal(o)    Object.freeze(o)
 不能添加属性           不能添加属性
 不能删除属性           不能删除属性
 不能修改属性描述符        不能修改属性描述符
                   不能修改属性的值


                   相当于常量
继续看代码




      IE          Firefox     Chrome   Safari      Opera
x     undefined   undefined   hack     undefined   undefined

[0]   hack        ‘’          hack     hack        hack

[1]   ‘’          ‘’          123      ‘’          ‘’
严格模式
 更严格的语法检测
 更明确的对象扩展原则
 更确定的错误检测机制
 更严格的对象绑定机制
严格模式



 ECMAScript           v3 – 15.3.4.3
    If thisArg is null or undefined, the called function is passed the global
     object as the this value. Otherwise, the called function is passed
     ToObject(thisArg) as the this value.


 ECMAScript           v5 – 15.3.4.3
    Return the result of calling the [[Call]] internal method of func,
     providing thisArg as the this value and argListas the list of arguments.
严格模式



   不允许访问callee和callee.caller。
   索引器对应的属性,仅仅是传递的参数值的拷贝,并不存在与
    形参的动态关联性。
   callee和caller的特性被设置为[[Configurable:false]]。
   arguments以及arguments.callee、arguments.caller、
    arguments.callee.caller不允许被重新赋值。
严格模式
 通过指令序言(Directive   Prologues)进入
严格模式
 不能给未定义的属性赋值,会产生TypeError
 eval和arguments相当于关键字
 八进制数字直接量和八进制转义序列取消
 eval拥有单独执行环境
 delete会产生TypeError
正则表达式的细节

 ECMAScript        v3 – 7.8.5
    A regular expression literal is an input element that is
     converted to a RegExp object (section 15.10) when it is
     scanned. The object is created before evaluation of the
     containing program or function begins. Evaluation of the
     literal produces a reference to that object; it does not
     create a new object.
 ECMAScript        v5 – 7.8.5
    A regular expression literal is an input element that is
     converted to a RegExp object (see 15.10) each time the
     literal is evaluated.
Obejct Initializer的细节

  ECMAScript v3                   ECMAScript v5
PropertyName :                  PropertyName :
 Identifier                      IdentifierName
 StringLiteral                   StringLiteral
 NumericLiteral                  NumericLiteral

ObjectLiteral :                 ObjectLiteral :
 {}                              {}
 { PropertyNameAndValueList }    { PropertyNameAndValueList }
                                 { PropertyNameAndValueList , }
保留字
 Deywords:
    debugger
 Reserved   Words:
    class enum extends super const export
     import
 Reserved   Words (Strict Mode):
    implements let private public yield in
     terface package protected static
Reference
   http://www.cnblogs.com/_franky/articles/2143688.html

   http://www.cnblogs.com/_franky/articles/2149843.html

   http://www.cnblogs.com/_franky/articles/2184461.html

   http://www.cnblogs.com/_franky/articles/2184581.html
谈谈Harmony
 正在社区讨论中
    http://wiki.ecmascript.org/doku.php?id=ha
     rmony:proposals
 有可能是:
    原生对象的API增加
    新的类型
    语法的大更新:关键字、对象直接量
    python + coffee + ruby
原生对象API扩展
 Number:
    Number.isFinite(n)
    Number.isNaN(n)
    Number.isInteger(n)
    Number.toInteger(str)
 RegExp:
    ‘y’ flag:sticky模式,固定lastIndex
    更加符合Web使用的转义效果
原生对象API扩展
 String:
    String.prototype.repeat(count)
    String.prototype.startsWith(s)
    String.prototype.endsWith(s)
    String.prototype.contains(s)
    String.prototype.toArray()
 Math:
    改进Math.random
原生对象API扩展
 Function:
    更严格的toString实现。
 Object:
    Object.is(x, y):相当于equals
    Object.create改进:仅value的descriptor简
     化为{ key: value }形式
新的类型
 Map   & Set
    Map是可以以object为key的object hash
      get   | set | has | delete
    Set是不能有重复元素的Array
      add   | has | delete
 WeakMap
    key会被回收的Map
    用于解决内存泄露问题
新的类型 - Proxy
 Proxy:
    万能工厂?万能拦截器?
    getOwnPropertyDescriptor
    getPropertyDescriptor
    getOwnPropertyNames
    getPropertyNames
    defineProperty
    delete
    fix
Proxy
 简单实现拦截:
   has: function(name) -> boolean
   hasOwn: function(name) -> boolean
   get: function(receiver, name) -> any
   set: function(receiver, name, val) -> boolean
   enumerate: function() -> [string]
   keys: function() -> [string]


   赋值+取值+遍历
Proxy
        Let’s MVC
新的类型- Iterator
                 •   import
                 •   iterator
                 •   next
                 •   for…of
新的语法
 变量声明:
     const:不可变常量
     let:块作用域变量


 解构:
   [x, y, z] = 1
   [a, b] = [b, a]
   var { x: a, y: b, z: c } = { a: 1, b: 2, c: 3 }
   for (let [key, value] in o) { print(value); }
新的语法
 默认参数值:
    function add(x = 0, y = 0) { /* … */ }
 不定量参数:
    function sum(x, …others) { /* … */ }
 数组解开传参:
    sum(1, 2, …array)
      ->   sum.apply(this, [1, 2].concat(array)
新的语法
 Generator
    function*
    yield
新的语法
 Array      Comprehensions
    执行
      add(user)     for user of database.all(‘user’)
    过滤
      print(x)   for (x of [1, 2, 3]) if (x % 2 === 0)
    多维
      [x,   y] for (x of rows) for (y of columns)
    映射
      [Math.abs(x)     for (x of [1, -1, 2, -3, 4, 9])]
新的语法
 模块化
    module | export | import
 类化
    class | extends
 访问权限
    public | private
    private name generator
可能会有的
 异步编程语法支持(Promise)
    var x = yield $.getJSON(url); print(x);
 Map的字面量
    (x: 1, y: 2)
 重载[]运算
    Proxy已经可以完成
exit(0);

More Related Content

What's hot (19)

PDF
千呼萬喚始出來的 Java SE 7
Justin Lin
 
PDF
functional-scala
wang hongjiang
 
PPT
Scala function-and-closures
wang hongjiang
 
PDF
Java 開發者的函數式程式設計
Justin Lin
 
PPT
Introduction to C++ over CLI
建興 王
 
PDF
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
Johnny Sung
 
PDF
Keep your code clean
macrochen
 
PDF
Java8 lambda
koji lin
 
PPTX
2, object oriented programming
ted-xu
 
PPTX
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
 
PDF
JavaScript 教程
Bobby Zhou
 
PPTX
5, initialization & cleanup
ted-xu
 
PPT
Scala
deathxlent
 
PPTX
重構—改善既有程式的設計(chapter 7)
Chris Huang
 
PPTX
C++中级培训胶片
ff1
 
PDF
所谓闭包
youzitang
 
PDF
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Justin Lin
 
PDF
Java script closures
skywalker1114
 
PDF
getPDF.aspx
byron zhao
 
千呼萬喚始出來的 Java SE 7
Justin Lin
 
functional-scala
wang hongjiang
 
Scala function-and-closures
wang hongjiang
 
Java 開發者的函數式程式設計
Justin Lin
 
Introduction to C++ over CLI
建興 王
 
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
Johnny Sung
 
Keep your code clean
macrochen
 
Java8 lambda
koji lin
 
2, object oriented programming
ted-xu
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
 
JavaScript 教程
Bobby Zhou
 
5, initialization & cleanup
ted-xu
 
Scala
deathxlent
 
重構—改善既有程式的設計(chapter 7)
Chris Huang
 
C++中级培训胶片
ff1
 
所谓闭包
youzitang
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Justin Lin
 
Java script closures
skywalker1114
 
getPDF.aspx
byron zhao
 

Viewers also liked (18)

PPT
Maria Korolenko: some September's truth
Viktoria Pereguda
 
PPT
9 фактів про автостоп
Viktoria Pereguda
 
PPTX
Rectangle, rhombuses and square
Ikvina Dhyah Ratnawati
 
PPTX
Android 4-app
lydiafly
 
PPT
Kultur organisasi p pt
lenin888
 
PPSX
Cynthia's slide show
keybiz4u
 
PPTX
英語版桃太郎
thethreewood
 
PPTX
英語版桃太郎
thethreewood
 
PPTX
英語版桃太郎
thethreewood
 
PPTX
Framing and internalizing my values
Martha Goni
 
PPTX
Etisalat : International Market Entry Strategies
hsbj
 
PPT
Castillo joel project 4
Joel Castillo
 
DOC
The ant and_the_grasshopper_4
Frances Jayne
 
PPTX
Volkswagen :Scandal, Ethical and Professional issues
hsbj
 
DOCX
tz30103
Frances Jayne
 
PDF
Memasang firewall
Royon Reys Rumapea
 
PPTX
Fotoalbum steelers
Schmuder
 
PDF
Ukk teori tkj_2
Royon Reys Rumapea
 
Maria Korolenko: some September's truth
Viktoria Pereguda
 
9 фактів про автостоп
Viktoria Pereguda
 
Rectangle, rhombuses and square
Ikvina Dhyah Ratnawati
 
Android 4-app
lydiafly
 
Kultur organisasi p pt
lenin888
 
Cynthia's slide show
keybiz4u
 
英語版桃太郎
thethreewood
 
英語版桃太郎
thethreewood
 
英語版桃太郎
thethreewood
 
Framing and internalizing my values
Martha Goni
 
Etisalat : International Market Entry Strategies
hsbj
 
Castillo joel project 4
Joel Castillo
 
The ant and_the_grasshopper_4
Frances Jayne
 
Volkswagen :Scandal, Ethical and Professional issues
hsbj
 
tz30103
Frances Jayne
 
Memasang firewall
Royon Reys Rumapea
 
Fotoalbum steelers
Schmuder
 
Ukk teori tkj_2
Royon Reys Rumapea
 
Ad

Similar to Ecma script edition5-小试 (20)

PPT
千呼萬喚始出來的Java SE 7
javatwo2011
 
PPT
Js培训
yiditushe
 
PPTX
Dev307
建興 王
 
PPTX
所谓闭包
ilovey4
 
PPTX
前端测试
Zheng Biao
 
PPTX
前端测试
frontwindysky
 
PPT
Javascript之昨是今非
Tony Deng
 
PPTX
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
 
PPTX
Reactive application with akka.NET & .NET Core
Chen-Tien Tsai
 
PPT
Hibernate教程
Shilong Sang
 
PDF
Java script closures
skywalker1114
 
PPT
Ch07
jashliao
 
PDF
Programming python - part 1
Che-Cheng Hsu
 
PDF
getPDF.aspx
byron zhao
 
DOC
Java华为面试题
yiditushe
 
KEY
Scala
popeast
 
PDF
Google protocol buffers简析
wavefly
 
PDF
模块一-Go语言特性.pdf
czzz1
 
千呼萬喚始出來的Java SE 7
javatwo2011
 
Js培训
yiditushe
 
Dev307
建興 王
 
所谓闭包
ilovey4
 
前端测试
Zheng Biao
 
前端测试
frontwindysky
 
Javascript之昨是今非
Tony Deng
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
 
Reactive application with akka.NET & .NET Core
Chen-Tien Tsai
 
Hibernate教程
Shilong Sang
 
Java script closures
skywalker1114
 
Ch07
jashliao
 
Programming python - part 1
Che-Cheng Hsu
 
getPDF.aspx
byron zhao
 
Java华为面试题
yiditushe
 
Scala
popeast
 
Google protocol buffers简析
wavefly
 
模块一-Go语言特性.pdf
czzz1
 
Ad

Recently uploaded (20)

PPTX
美国毕业证(UNL毕业证书)内布拉斯加大学林肯分校毕业证假学位证
htqokou
 
PPTX
英国学位证书,利物浦大学毕业证学历认证UOL毕业证咨询
xnonq
 
PPTX
美国毕业证(GGU毕业证书)美国金门大学毕业证国外证书
ykewyw
 
PPTX
加拿大毕业证(UofG毕业证书)圭尔夫大学毕业证留学假毕业证
xyqutdu
 
PPTX
英国学位证书,谢菲尔德大学毕业证学历认证TUOS毕业证购买
xnonq
 
PPT
澳洲学位证书,阿德莱德大学毕业证学历认证Adelaide毕业证咨询
fcuvudu
 
PPTX
美国毕业证(UCI毕业证书)加利福尼亚大学尔湾分校毕业证毕业证文凭
ekfeg
 
PPTX
澳洲学位证书,格里菲斯大学毕业证学历认证GU毕业证购买
ydounu
 
PPTX
加州大学(UCSB)毕业证如何办理
70u9aw0ff
 
PDF
黑客改SAT分数, 【微信:viphuzhao】黑客改ACT成绩, 黑客修改AP考试成绩, 黑客改IB成绩 黑客改CFA成绩, 黑客改NCLEX分数, ...
→viphuzhao 微信
 
PPTX
加拿大毕业证(McGill毕业证书)麦吉尔大学毕业证文凭'毕业证购买'
ysaab1
 
PDF
2025市民生活講座「AI人工智慧應用360°面面觀」2小時, 北市圖清江分館,20250628
張大明 Ta-Ming Chang
 
PPTX
澳洲毕业证(USQ毕业证书)南昆士兰大学毕业证国外大学文凭制作
batne
 
PPTX
澳洲毕业证(USQ毕业证书)南昆士兰大学毕业证毕业文凭证书
uweutue
 
PDF
別再相信「共學善行會詐騙」的謠言!深入了解我們的公益行動與社會貢獻 近來,網路上出現了關於「共學善行會詐騙」的不實傳言
alwnderbronm
 
PPTX
加拿大学位证书,康考迪亚大学毕业证学历认证Concordia毕业证哪里买
uxohx
 
PPTX
美国毕业证(UVM毕业证书)佛蒙特大学毕业证国外大学文凭制作
omuhk
 
PPTX
英国毕业证(King's毕业证书)伦敦大学国王学院毕业证全套证件文凭
uobumab
 
PPTX
英国毕业证(IC毕业证书)帝国理工大学毕业证成绩单ps
omuhk
 
PPTX
美国毕业证(UCSD毕业证书)加利福尼亚大学圣迭戈分校毕业证留学生文凭
ekfeg
 
美国毕业证(UNL毕业证书)内布拉斯加大学林肯分校毕业证假学位证
htqokou
 
英国学位证书,利物浦大学毕业证学历认证UOL毕业证咨询
xnonq
 
美国毕业证(GGU毕业证书)美国金门大学毕业证国外证书
ykewyw
 
加拿大毕业证(UofG毕业证书)圭尔夫大学毕业证留学假毕业证
xyqutdu
 
英国学位证书,谢菲尔德大学毕业证学历认证TUOS毕业证购买
xnonq
 
澳洲学位证书,阿德莱德大学毕业证学历认证Adelaide毕业证咨询
fcuvudu
 
美国毕业证(UCI毕业证书)加利福尼亚大学尔湾分校毕业证毕业证文凭
ekfeg
 
澳洲学位证书,格里菲斯大学毕业证学历认证GU毕业证购买
ydounu
 
加州大学(UCSB)毕业证如何办理
70u9aw0ff
 
黑客改SAT分数, 【微信:viphuzhao】黑客改ACT成绩, 黑客修改AP考试成绩, 黑客改IB成绩 黑客改CFA成绩, 黑客改NCLEX分数, ...
→viphuzhao 微信
 
加拿大毕业证(McGill毕业证书)麦吉尔大学毕业证文凭'毕业证购买'
ysaab1
 
2025市民生活講座「AI人工智慧應用360°面面觀」2小時, 北市圖清江分館,20250628
張大明 Ta-Ming Chang
 
澳洲毕业证(USQ毕业证书)南昆士兰大学毕业证国外大学文凭制作
batne
 
澳洲毕业证(USQ毕业证书)南昆士兰大学毕业证毕业文凭证书
uweutue
 
別再相信「共學善行會詐騙」的謠言!深入了解我們的公益行動與社會貢獻 近來,網路上出現了關於「共學善行會詐騙」的不實傳言
alwnderbronm
 
加拿大学位证书,康考迪亚大学毕业证学历认证Concordia毕业证哪里买
uxohx
 
美国毕业证(UVM毕业证书)佛蒙特大学毕业证国外大学文凭制作
omuhk
 
英国毕业证(King's毕业证书)伦敦大学国王学院毕业证全套证件文凭
uobumab
 
英国毕业证(IC毕业证书)帝国理工大学毕业证成绩单ps
omuhk
 
美国毕业证(UCSD毕业证书)加利福尼亚大学圣迭戈分校毕业证留学生文凭
ekfeg
 

Ecma script edition5-小试

  • 2. 什么是ECMAScript 由欧洲计算机制造商协会(ECMA)通过ECMA-262标准化的脚 本程序设计语言 • Javascript • Jscript • ActionScript 版本 发表日期 描述 3 1999年12月 我们所认识的版本 4 放弃 关于语言的复杂性出现分歧,被放弃 5 2009年12月 增加多项改进 Harmony 社区讨论中 将以ECMAScript6发布
  • 3. 现有支持度  Firefox4+ | Chrome11+ | IE10PP2  NodeJS(V8)  Safari5 – 仅部分  Opera11.5 – 基本无实现  http://test262.ecmascript.org/  http://kangax.github.com/es5-compat-table/
  • 5. 新增API  Object.create  Date.now  Object.defineProperty  Array.isArray  Object.getPrototypeOf  JSON  Object.keys  Function.prototype.bind  Object.seal  String.prototype.trim  Object.freeze  Array.prototype.indexOf  Object.preventExtensions  Array.prototype.lastIndexOf  Object.isSealed  Array.prototype.every  Object.isExtensible  Array.prototype.some  Object.getOwnPropertyDescriptor  Array.prototype.forEach  Object.getOwnPropertyNames  Array.prototype.map  Date.prototype.toISOString  Array.prototype.reduce  Array.prototype.reduceRight
  • 6. 先来一个题  varx = 123;  delete x; // ??  window.y = 123;  delete y; // ??  Why?
  • 7. 属性描述符  是用于解释某一个被命名的属性具体操作规则 的特性集。  属性描述符中的对应每个字段名都会有一个值。 其中任何一个字段都可以缺省或显式的设置。  属性描述符还会被进一步以字段的实际用途来 分类成--数据属性描述符和访问器属性描述符。
  • 8. 数据属性 & 访问器属性 Data Descriptor Accessor Descriptor  [[Value]]  [[Get]]  [[Writable]]  [[Set]]  [[Enumerable]]  [[Enumerable]]  [[Configurable]]  [[Configurable]]
  • 9. 数据属性 & 访问器属性  Object.defineProperty(o, p, descriptor)
  • 10. 数据属性 & 访问器属性  Getter & Setter in Object Initializer
  • 11. 再来看一段代码 javascript is prototype based class oriented programming language Why Class?
  • 12. 彻底基于原型  很多人觉得javascript不舒服、恶心、语法怪 异,是因为你学的第一个语言不是javascript, 因为你接触的第一种面向对象的实现方案不是 基于原型,而你又没有胆量完全抛开以前的所 有,把javascript作为一门全新的、和java和c 完全没有关系的语言来看,承认自己的无知, 而后如新生婴儿一般求知。
  • 13. 彻底基于原型  Object.create(proto, properties) • Pros: • No class, No new • Property Descriptor • prototype based • Cons: • No constructor
  • 15. 一些细节  varo = Object.create(null);  console.log(o + ‘ is created’);  What happens?  ToPrimitive -> toString -> null.toString  没有任何规范说对象的[[prototype]]不能为 null或undefined  Object.prototype | Function.prototype
  • 17. 密封 & 冻结 Object.seal(o) Object.freeze(o)  不能添加属性  不能添加属性  不能删除属性  不能删除属性  不能修改属性描述符  不能修改属性描述符  不能修改属性的值  相当于常量
  • 18. 继续看代码 IE Firefox Chrome Safari Opera x undefined undefined hack undefined undefined [0] hack ‘’ hack hack hack [1] ‘’ ‘’ 123 ‘’ ‘’
  • 19. 严格模式  更严格的语法检测  更明确的对象扩展原则  更确定的错误检测机制  更严格的对象绑定机制
  • 20. 严格模式  ECMAScript v3 – 15.3.4.3  If thisArg is null or undefined, the called function is passed the global object as the this value. Otherwise, the called function is passed ToObject(thisArg) as the this value.  ECMAScript v5 – 15.3.4.3  Return the result of calling the [[Call]] internal method of func, providing thisArg as the this value and argListas the list of arguments.
  • 21. 严格模式  不允许访问callee和callee.caller。  索引器对应的属性,仅仅是传递的参数值的拷贝,并不存在与 形参的动态关联性。  callee和caller的特性被设置为[[Configurable:false]]。  arguments以及arguments.callee、arguments.caller、 arguments.callee.caller不允许被重新赋值。
  • 23. 严格模式  不能给未定义的属性赋值,会产生TypeError  eval和arguments相当于关键字  八进制数字直接量和八进制转义序列取消  eval拥有单独执行环境  delete会产生TypeError
  • 24. 正则表达式的细节  ECMAScript v3 – 7.8.5  A regular expression literal is an input element that is converted to a RegExp object (section 15.10) when it is scanned. The object is created before evaluation of the containing program or function begins. Evaluation of the literal produces a reference to that object; it does not create a new object.  ECMAScript v5 – 7.8.5  A regular expression literal is an input element that is converted to a RegExp object (see 15.10) each time the literal is evaluated.
  • 25. Obejct Initializer的细节 ECMAScript v3 ECMAScript v5 PropertyName : PropertyName : Identifier IdentifierName StringLiteral StringLiteral NumericLiteral NumericLiteral ObjectLiteral : ObjectLiteral : {} {} { PropertyNameAndValueList } { PropertyNameAndValueList } { PropertyNameAndValueList , }
  • 26. 保留字  Deywords:  debugger  Reserved Words:  class enum extends super const export import  Reserved Words (Strict Mode):  implements let private public yield in terface package protected static
  • 27. Reference  http://www.cnblogs.com/_franky/articles/2143688.html  http://www.cnblogs.com/_franky/articles/2149843.html  http://www.cnblogs.com/_franky/articles/2184461.html  http://www.cnblogs.com/_franky/articles/2184581.html
  • 28. 谈谈Harmony  正在社区讨论中  http://wiki.ecmascript.org/doku.php?id=ha rmony:proposals  有可能是:  原生对象的API增加  新的类型  语法的大更新:关键字、对象直接量  python + coffee + ruby
  • 29. 原生对象API扩展  Number:  Number.isFinite(n)  Number.isNaN(n)  Number.isInteger(n)  Number.toInteger(str)  RegExp:  ‘y’ flag:sticky模式,固定lastIndex  更加符合Web使用的转义效果
  • 30. 原生对象API扩展  String:  String.prototype.repeat(count)  String.prototype.startsWith(s)  String.prototype.endsWith(s)  String.prototype.contains(s)  String.prototype.toArray()  Math:  改进Math.random
  • 31. 原生对象API扩展  Function:  更严格的toString实现。  Object:  Object.is(x, y):相当于equals  Object.create改进:仅value的descriptor简 化为{ key: value }形式
  • 32. 新的类型  Map & Set  Map是可以以object为key的object hash  get | set | has | delete  Set是不能有重复元素的Array  add | has | delete  WeakMap  key会被回收的Map  用于解决内存泄露问题
  • 33. 新的类型 - Proxy  Proxy:  万能工厂?万能拦截器?  getOwnPropertyDescriptor  getPropertyDescriptor  getOwnPropertyNames  getPropertyNames  defineProperty  delete  fix
  • 34. Proxy  简单实现拦截:  has: function(name) -> boolean  hasOwn: function(name) -> boolean  get: function(receiver, name) -> any  set: function(receiver, name, val) -> boolean  enumerate: function() -> [string]  keys: function() -> [string]  赋值+取值+遍历
  • 35. Proxy Let’s MVC
  • 36. 新的类型- Iterator • import • iterator • next • for…of
  • 37. 新的语法  变量声明:  const:不可变常量  let:块作用域变量  解构:  [x, y, z] = 1  [a, b] = [b, a]  var { x: a, y: b, z: c } = { a: 1, b: 2, c: 3 }  for (let [key, value] in o) { print(value); }
  • 38. 新的语法  默认参数值:  function add(x = 0, y = 0) { /* … */ }  不定量参数:  function sum(x, …others) { /* … */ }  数组解开传参:  sum(1, 2, …array)  -> sum.apply(this, [1, 2].concat(array)
  • 39. 新的语法  Generator  function*  yield
  • 40. 新的语法  Array Comprehensions  执行  add(user) for user of database.all(‘user’)  过滤  print(x) for (x of [1, 2, 3]) if (x % 2 === 0)  多维  [x, y] for (x of rows) for (y of columns)  映射  [Math.abs(x) for (x of [1, -1, 2, -3, 4, 9])]
  • 41. 新的语法  模块化  module | export | import  类化  class | extends  访问权限  public | private  private name generator
  • 42. 可能会有的  异步编程语法支持(Promise)  var x = yield $.getJSON(url); print(x);  Map的字面量  (x: 1, y: 2)  重载[]运算  Proxy已经可以完成