博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈ES5/ES6
阅读量:6293 次
发布时间:2019-06-22

本文共 2774 字,大约阅读时间需要 9 分钟。

ES概念解释:

  ECMAScript是一种由(前身为,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本

ECMA-262规范 定义了ECMAScript支持的一套关键字,这些关键字标识了ECMAScript语句的开头和/或结尾。根据规定,关键字是保留的,不能用作变量名或函数名。下面是ECMAScript关键字的完整列表:

break else new var typeof

case finally return void

catch for switch while

default if throw delete

in try do instanceof

如果把用作变量名或函数名,可能得到诸如“Indetifier expected”(应该有)这样的错误信息。

ECMA-262的保留字

ECMAScript定义了一套保留字,保留字在某种意义上是为了将来的而保留的单词。因此,保留字不能被用作变量名或函数名。ECMA-2623版中保留字的完整列表如下:

abstract enum int short

boolean export interface static

byte extends long super char final

native synchronized class float package

throws const goto private transient debugger

implements protected volatile double

import public

如果将用作变量名或函数名,那么除非将来的浏览器实现了该保留字,否则很可能收不到任何错误消息。当浏览器将其实现后,该单词被看作关键字,如此将出现关键字错误。

1995Netscape公司发布的Netscape Navigator 2.0中,发布了与Sun联合开发的JavaScript 1.0并且大获成功, 并且随后的3.0版本中发布了JavaScript1.1,恰巧这时微软进军浏览器市场,IE 3.0搭载了一个JavaScript的克隆版-JScript, 再加上CenviScriptEase(也是一种客户端),导致了三种不同版本的客户端脚本语言同时存在。为了建立语言的标准化,1997JavaScript 1.1作为草案提交给ECMA),第三十九技术委员会(TC39)被委派来标准化一个通用的,跨平台的,中立于厂商的脚本语言的语法和语意标准。最后在NetscapeSun、微软、Borland等公司的参与下制订了ECMA-262,该标准定义了叫做ECMAScript的全新脚本语言。

从此以后的JavscriptJScriptActionScript等脚本语言都是基于ECMAScript标准实现的。

所以,ECMAScript实际上是一种脚本在语法和语义上的标准。实际上JavaScript是由ECMAScriptDOMBOM三者组成的。 所以说,在JavaScriptJScriptActionScript中声明变量,操作等语法完全一样,因为它们都是ECMAScript。但是在操作浏览器对象等方面又有各自独特的方法,这些都是各自语言的扩展。

 

ECMAScript发生了什么变化?

自第三版发布以来,ECMAScript因其与万维网的关联而获得了广泛应用,它实质上已经成为所有web浏览器都提供的一种编程语言。为编制第四版ECMAScript,人们做了大量的工作。尽管这些工作没能完成,也没有发布第四版标准,却促进了该语言的进化。ECMAScript第五版(发布为ECMA-262 5th edition)编入了很多事实上已经在浏览器实现中形成共识的语言规范解析,并且增加了对自第三版发布以来出现的新功能的支持。这些新功能包括访问器属性、反射创建和对象检测、属性特性的程序控制、新增数组操作函数、JSON对象编码格式、以及提供了改进的错误检查和程序安全性的严格模式。

ES5 新增内容

ES5 总体来说改动很少,最重要的是如下几个改动。这里先简单介绍一下,稍后有相应篇章详细描述。

use strict

可以在函数定义的第一行通过一个字符串语法把这个函数声明为 严格模式

function() {

  "use strict";

}

在严格模式下,会有如下一些限制:

  • 未声明的变量赋值直接报错,而不是变成全局变量
  • 函数默认的 this 将变成 undefined 而不是默认指向 window
  • 对只读属性进行写操作,删除不可删除属性,对不可拓展的对象添加属性均会抛出异常
  • 禁止使用 with 语句
  • 重名的属性会报错,重名的函数参数会报错

JSON 支持

默认支持 JSON.parse 和 JSON.stringify

对象和属性

现在可以对一个对象的属性设置 getter setter:

var obj = {};

Object.defineProperty(obj, "name", {

  get: function() {

    return name.toUpperCase();

    },

  set: function(n) {

    name=n;

    }

})

可以定义一个对象的属性是否可以修改、是否可以删除、是否可以添加:

Object.defineProperty( obj, "value", {

    value: true,

    writable: false,

    enumerable: true,

    configurable: true

});

现在可以直接冻结一个对象,冻结分两种:

  • Object.seal(obj), 使对象的属性配置配置无法修改,等价于给每一个属性都设置成 configurale=false
  • Object.freeze(obj),除了 seal 之外,它还会是属性值本身无法被修改,相当于对每个属性同时进行了 configurable=false 和 writable=false

现在可以更方便的遍历对象的属性了:

  • Object.getOwnPropertyNames
  • Object.keys

数组新增方法

数组新增了如下常用的方法:

  • map
  • every
  • filter
  • forEach
  • indexOf
  • reduce
  • reduceRight
  • some

所以你可以放心的写如下代码:

[1,2,3].map(function(a){return a*a;})

REFERENCE

1.

2.

 

转载于:https://www.cnblogs.com/indigojh/p/5517354.html

你可能感兴趣的文章
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>