SlideShare a Scribd company logo
1 of 43
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

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

What's hot (19)

千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
functional-scala
functional-scalafunctional-scala
functional-scala
 
Scala function-and-closures
Scala function-and-closuresScala function-and-closures
Scala function-and-closures
 
Java 開發者的函數式程式設計
Java 開發者的函數式程式設計Java 開發者的函數式程式設計
Java 開發者的函數式程式設計
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
 
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambda
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
Scala
ScalaScala
Scala
 
重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)
 
C++中级培训胶片
C++中级培训胶片C++中级培训胶片
C++中级培训胶片
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
Java script closures
Java script closuresJava script closures
Java script closures
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 

Viewers also liked

Maria Korolenko: some September's truth
Maria Korolenko: some September's truthMaria Korolenko: some September's truth
Maria Korolenko: some September's truthViktoria Pereguda
 
9 фактів про автостоп
9 фактів про автостоп9 фактів про автостоп
9 фактів про автостопViktoria Pereguda
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-applydiafly
 
Kultur organisasi p pt
Kultur organisasi p ptKultur organisasi p pt
Kultur organisasi p ptlenin888
 
Cynthia's slide show
Cynthia's slide showCynthia's slide show
Cynthia's slide showkeybiz4u
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎thethreewood
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎thethreewood
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎thethreewood
 
Framing and internalizing my values
Framing and internalizing my valuesFraming and internalizing my values
Framing and internalizing my valuesMartha Goni
 
Etisalat : International Market Entry Strategies
Etisalat : International Market Entry StrategiesEtisalat : International Market Entry Strategies
Etisalat : International Market Entry Strategieshsbj
 
Castillo joel project 4
Castillo joel project 4Castillo joel project 4
Castillo joel project 4Joel Castillo
 
The ant and_the_grasshopper_4
The ant and_the_grasshopper_4The ant and_the_grasshopper_4
The ant and_the_grasshopper_4Frances Jayne
 
Volkswagen :Scandal, Ethical and Professional issues
Volkswagen :Scandal, Ethical and Professional issuesVolkswagen :Scandal, Ethical and Professional issues
Volkswagen :Scandal, Ethical and Professional issueshsbj
 
Fotoalbum steelers
Fotoalbum steelersFotoalbum steelers
Fotoalbum steelersSchmuder
 

Viewers also liked (18)

Maria Korolenko: some September's truth
Maria Korolenko: some September's truthMaria Korolenko: some September's truth
Maria Korolenko: some September's truth
 
9 фактів про автостоп
9 фактів про автостоп9 фактів про автостоп
9 фактів про автостоп
 
Rectangle, rhombuses and square
Rectangle, rhombuses and squareRectangle, rhombuses and square
Rectangle, rhombuses and square
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-app
 
Kultur organisasi p pt
Kultur organisasi p ptKultur organisasi p pt
Kultur organisasi p pt
 
Cynthia's slide show
Cynthia's slide showCynthia's slide show
Cynthia's slide show
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎
 
英語版桃太郎
英語版桃太郎英語版桃太郎
英語版桃太郎
 
Framing and internalizing my values
Framing and internalizing my valuesFraming and internalizing my values
Framing and internalizing my values
 
Etisalat : International Market Entry Strategies
Etisalat : International Market Entry StrategiesEtisalat : International Market Entry Strategies
Etisalat : International Market Entry Strategies
 
Castillo joel project 4
Castillo joel project 4Castillo joel project 4
Castillo joel project 4
 
The ant and_the_grasshopper_4
The ant and_the_grasshopper_4The ant and_the_grasshopper_4
The ant and_the_grasshopper_4
 
Volkswagen :Scandal, Ethical and Professional issues
Volkswagen :Scandal, Ethical and Professional issuesVolkswagen :Scandal, Ethical and Professional issues
Volkswagen :Scandal, Ethical and Professional issues
 
tz30103
 tz30103 tz30103
tz30103
 
Memasang firewall
Memasang firewallMemasang firewall
Memasang firewall
 
Fotoalbum steelers
Fotoalbum steelersFotoalbum steelers
Fotoalbum steelers
 
Ukk teori tkj_2
Ukk teori tkj_2Ukk teori tkj_2
Ukk teori tkj_2
 

Similar to Ecma script edition5-小试

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
所谓闭包
所谓闭包所谓闭包
所谓闭包ilovey4
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
 
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreReactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreChen-Tien Tsai
 
Java script closures
Java script closuresJava script closures
Java script closuresskywalker1114
 
Programming python - part 1
Programming python - part 1Programming python - part 1
Programming python - part 1Che-Cheng Hsu
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 

Similar to Ecma script edition5-小试 (20)

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Js培训
Js培训Js培训
Js培训
 
Dev307
Dev307Dev307
Dev307
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
前端测试
前端测试前端测试
前端测试
 
前端测试
前端测试前端测试
前端测试
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
 
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreReactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET Core
 
A
AA
A
 
A
AA
A
 
Hibernate教程
Hibernate教程Hibernate教程
Hibernate教程
 
Java script closures
Java script closuresJava script closures
Java script closures
 
Ch07
Ch07Ch07
Ch07
 
Programming python - part 1
Programming python - part 1Programming python - part 1
Programming python - part 1
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Scala
ScalaScala
Scala
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 

Recently uploaded

布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书kathrynalvarez364
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...黑客 接单【TG/微信qoqoqdqd】
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制kathrynalvarez364
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxPriscilleXu
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单jakepaige317
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书kathrynalvarez364
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制bairnshajjes
 

Recently uploaded (7)

布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptx
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
 

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已经可以完成