ECMAScript 5正式发布
这周ECMAScript 5也即众所周知的JavaScript正式发布了(pdf),在给基本库带来更新的同时,还引入了更加严格的运行时模型,来帮助定位并移除通常的代码错误。
而早期对于ECMAScript 4的标准化工作基本就算是失败了;只有Adobe的ActionScript是基于建议的变化的。ECMA甚至都没有发布一个版本4的规范,因为不同的组织对于发展的进度并不满意;就这样,也没有浏览器来支持它了。
在过去的几年,随着JavaScript引擎的大力改善,比如Nitro和TraceMonkey,JavaScript已经极具性能,以Google Wave为代表的在线协作应用可以证明这一点。甚至还有伴随GWT 2.0发布的Google Chrome扩展Speed Tracer,来帮助优化JavaScript应用的性能。
从这点上来讲,ECMAScript 5旨在和当前的ECMAScript 3版本保持向后兼容(以寻求在不同浏览器上更快速的采用),并对开发者提供了更加严格的限制来避免通常的编码陷阱。
严格模式
严格模式的引入,目的在于避免ECMAScript应用中通常的代码问题。这是通过在单元(脚本或函数)上指定一句话来达到的:
"use strict;"
这句话不会对已有的运行时产生什么影响,但版本是5的新运行时就会为整个脚本(如果这句话定义在脚本开头)或者单个函数(如果定义在函数的开头)打开严格模式。这样就允许计划中的既有代码对严格模式和非严格模式的混合使用。那么,严格模式意味着什么呢?
- 变量在使用前必须声明。换句话说,i=3这下就是个运行时错误了;需要var i=3(如果i在做作用域里面没有定义过)
- eval变成保留字,而从eval引入的新变量不再有效,因此eval("var i=3"); print(i);现在会抛出错误。
- 不再使用八进制;所以010就是十,不再是八。
- 如果configurable被设置成false,delete就不能使用在参数、函数、变量或者其他属性上。
- 一般会带来错误的with语句,将不再使用,会被认为是语法错误。
- 函数不再能使用具有相同名称的重复参数。
- 对象不再能使用具有相同名称的重复属性。
- arguments和caller变量不再可变。
- 对全局对象的访问将会是运行时错误。
库扩展
基本库中的其他扩展包括:
- Date现在可以支持生成ISO8601格式的日期(比如20091209T12:34:56Z),并可以解析。
- String现在有内建的trim()方法
- 新添JSON对象包括parse和stringify方法来支持JSON数据的高效生成;就像eval,但在减少代码时不会带来安全影响。另外,不仅仅可以使用RFC 4627中的JSONObject和JSONArray,还可以使用JSONValue。(RFC 4627把JSON-Text限制成一个对象或者数组)
- 新添bind内建方法,就跟Prototype的bind方法的语义一样。
- 数组现在可以支持indexOf(),map(),filter()和reduce()。
- 对象现在有seal()方法(防止添加新的属性和删除既有属性)和freeze()方法(使得所有属性变成只读,同时防止新添属性或删除属性)
- Object.keys()可以列出所有能列举的对象属性。
- Object.getOwnPropertyNames()可以列出所有能列举和不能列举的属性。
- Object.getPrototypeof()可以得到指定对象的prototype属性。
总结
新增的标准JSON对象解析机制和严格模式将会让开发者受益良多,使得转化成Prototype和其他扩展库需要的更小型库成为可能。从JSON流解析出ISO日期现在要变得比以前方便很多,而且看起来会成为将来日期表示事实上的标准。最后,因为这次是向后兼容的,并从Prototype这样既有库获得灵感,开发者和web浏览器很有可能在不久将来会为JavaScript带来新的特性。
ECMAScript 5正式发布的更多相关文章
- ECMAScript和JavaScript的区别,ECMAScript发展更新历史,ECMAScript5和ECMAScript6的新特性及浏览器支持情况,ECMAScript 5/ECMAScript 2015正式发布
ECMAScript和JavaScript的区别 ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会.欧洲计算机制造商协会是 ...
- ECMAScript正则表达式6个最新特性
译者按: 还没学好ES6?ECMAScript 2018已经到来啦! 原文:ECMAScript regular expressions are getting better! 作者: Mathias ...
- 学不动了,ECMAScript2018都来了
原文:ECMAScript regular expressions are getting better! 作者: Mathias Bynens: Google V8引擎开发者 译者:Fundebug ...
- JavaScript学习之路-为什么要学习JavaScript语法
版权声明:未经博主允许不得转载 前言 为什么要学习JavaScript语法,没有理由,因为工作需要,也为了成为全栈,那现在还是好好努力学习吧! 发展 说实话,JavaScript很好学也很重要,也很容 ...
- js 历史
原文http://javascript.ruanyifeng.com/introduction/history.html JavaScript的诞生 JavaScript 因为互联网而生,紧随着浏览器 ...
- JavaScript 语言的历史
说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.诞 ...
- 00.JS前言
前言: 学习一门编程语言的基本步骤(01)了解背景知识 1.了解背景知识 1)什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言.所谓“脚本语言”(scri ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- js入门基础
JavaScript语言介绍 JavaScript的历史 诞生于1995年,最初名字叫做Mocha,1995年9月改为LiveScript.Netscape公司与Sun公司(Java语言的发明者)达成 ...
随机推荐
- creating normals from alpha/heightmap inside a shader
http://www.polycount.com/forum/showthread.php?t=117185 I am making some custom terrain shaders with ...
- 初涉A*剪枝
挖坑防忘,天亮补题解. #include <algorithm> #include <iostream> #include <cstring> #include & ...
- java17 线程的方法
线程的方法: .isAlive():判断线程是否还活着,即线程是否还未中止. .getPriority():获得线程的优先级数值. .setPriority():设置线程的优先级. .setName( ...
- 嵌入式Linux-objdump命令的使用
objdump命令的使用 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump -f test 显示t ...
- android开发之SnackBar的使用
SnackBar是一个类似于Toast的东西,它也有显示时长,但是比Toast更加灵活,同时,我们还可以给SnackBar设置点击事件,那么我们今天就来看看怎么用吧! 先来一张效果图: 这种效果大家可 ...
- Java基础知识强化之IO流笔记37:FileReader/FileWriter(转换流的子类)复制文本文件案例
1. 转换流的简化写法: 由于我们常见的操作都是使用本地默认编码,所以,不用指定编码.而转换流的名称有点长,所以,Java就提供了其子类供我们使用:FileReader / FileWriterOut ...
- Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...
- css所有选择器的详解
----------------------------------------css 选择器---------------------------------------- 1,组合选择器: 1)e ...
- react环境搭建
react-webpack文件夹是开发目录,在此目录下执行命令,假设你已经正确安装了 nodejs 一:参照教程搭建环境 https://github.com/newtriks/generator-r ...
- mybatis错误:Invalid bound statement (not found)
解决办法是去看看mybatis配置里面的可能因为配置为什么格式文件解析不到 <property name="mapperLocations" value="clas ...