标签:
最近在阅读《探索es6》,就把自己认为重要的做一点笔记,方便日后学习。
有两组 ES6 资源:
原则上,语言的一个新版本是一个清理的机会,可以清理过时的特性或者改变特性的工作方式。这意味着新的代码在语言的旧的实现中无法工作,老的代码在新的实现中无法工作。每段代码都和特定的语言版本关联。针对两个不同语言版本写两种不同代码是很常见的。
通过一直向后兼容。这意味着我们必须放弃一些野心,比如清理 JavaScript :我们不能引入破坏性改变。向后兼容意味着不要移除特性,也不要修改特性。原则是:“不要破坏 web ”。
然而,我们可以添加新的特性,并且使已有的特性更加强大。
ECMAScript 5 引入严格模式来清理语言,在文件或者函数的第一行放入下面的内容就可以开启严格模式:‘use strict‘;
严格模式引入了三种破坏性的改变:
语法改变:一些之前合法的语法在严格模式下面是不允许的。例如:
with
语句。它允许使用者添加任何对象到变量作用域链,这会减缓程序的执行速度,并且很难指出某个变量指向哪里。更多种类的错误。例如:
ReferenceError
。在非严格模式下,这样干就会创建一个全局变量。TypeError
。在非严格模式下,不会产生任何效果。不同的语义:在严格模式下,一些语法结构表现得不一样。例如:
arguments
不再随着当前参数值的改变而改变。this
是 undefined
。在非严格模式下,它指向全局对象( window
),也就是说如果调用一个构造器的时候没有使用 new
,就会创建一些全局变量。严格模式是一个很好地说明了版本化是棘手的:即便能够制作一个干净版本的 JavaScript ,也很难被大家接受。主要原因是破坏了一些现存的代码,降低了执行速度,并且加入到文件中也很麻烦(更不用说交互的命令行)。
有三种简单的方式来玩儿 ES6 :
babel-node
,一个 Node.js 的可执行版本,它能运行 ES6 代码(在内部编译成 ES5 )。它能通过 npm 安装。现在可以写二进制和八进制数值字面量:
> 0xFF // ES5: hexadecimal 255 > 0b11 // ES6: binary 3 > 0o10 // ES6: octal 8
全局对象 Number 上添加了一些新的属性,尤其是:
Number.EPSILON
用于比较浮点数,容忍舍入错误。
parseInt()
并没有对八进制或二进制字面量特殊支持!
如果想解析这种字面量,应该使用 Number()
;
或者,也可以移除前缀,然后使用 parseInt()
,传入适当的 radix
参数;
//************************** > parseInt(‘0b111‘) 0 > parseInt(‘0b111‘, 2) 0 > parseInt(‘111‘, 2) 7 > parseInt(‘0o10‘) 0 > parseInt(‘0o10‘, 8) 0 > parseInt(‘10‘, 8) 8 //************************** > Number(‘0b111‘) 7 > Number(‘0o10‘) 8 //************************** > parseInt(‘111‘, 2) 7 > parseInt(‘10‘, 8) 8
四个数值相关的全局函数已经添加到 Number
下面了,这些方法是: isFinite
和 isNaN
, parseFloat
和parseInt
。所有方法都表现得基本跟对应的全局函数一样,但是 isFinite
和 isNaN
不需要它们的参数是数字。
Math.sign(x)
返回 x
的符号,-1或+1。如果 x
是 NaN
或者零,则返回 x
标签:
原文地址:http://www.cnblogs.com/huansky/p/5666318.html