zoukankan      html  css  js  c++  java
  • es6学习笔记1

    最近在阅读《探索es6》,就把自己认为重要的做一点笔记,方便日后学习。

    1、获取更多的es6资源的办法

    有两组 ES6 资源:

    2、非版本化升级

    原则上,语言的一个新版本是一个清理的机会,可以清理过时的特性或者改变特性的工作方式。这意味着新的代码在语言的旧的实现中无法工作,老的代码在新的实现中无法工作。每段代码都和特定的语言版本关联。针对两个不同语言版本写两种不同代码是很常见的。

    通过一直向后兼容。这意味着我们必须放弃一些野心,比如清理 JavaScript :我们不能引入破坏性改变。向后兼容意味着不要移除特性,也不要修改特性。原则是:“不要破坏 web ”。

    然而,我们可以添加新的特性,并且使已有的特性更加强大。

    3、严格模式与 ECMAScript 6

    ECMAScript 5 引入严格模式来清理语言,在文件或者函数的第一行放入下面的内容就可以开启严格模式:'use strict';

    严格模式引入了三种破坏性的改变:

    • 语法改变:一些之前合法的语法在严格模式下面是不允许的。例如:

      • 禁止 with 语句。它允许使用者添加任何对象到变量作用域链,这会减缓程序的执行速度,并且很难指出某个变量指向哪里。
      • 删除一个独立的标识符(一个变量,而不是一个属性)是不允许的。
      • 函数只能在作用域的顶层声明。
      • 更多的保留字: implements interface let package private protected public static yield 。
    • 更多种类的错误。例如:

      • 给一个未声明的变量赋值会抛出 ReferenceError 。在非严格模式下,这样干就会创建一个全局变量。
      • 修改只读的属性(比如字符串的长度属性)会抛出 TypeError 。在非严格模式下,不会产生任何效果。
    • 不同的语义:在严格模式下,一些语法结构表现得不一样。例如:

      • arguments 不再随着当前参数值的改变而改变。
      • 在非方法的函数中 this 是 undefined 。在非严格模式下,它指向全局对象( window ),也就是说如果调用一个构造器的时候没有使用 new ,就会创建一些全局变量。

    严格模式是一个很好地说明了版本化是棘手的:即便能够制作一个干净版本的 JavaScript ,也很难被大家接受。主要原因是破坏了一些现存的代码,降低了执行速度,并且加入到文件中也很麻烦(更不用说交互的命令行)。

    4、尝试 ECMAScript 6

    有三种简单的方式来玩儿 ES6 :

    • 1、 web 浏览器:使用在线的 Babel REPL ,一个交互式的工具,能将 ES6 编译成 ES5 。如果选择这种方式的话就什么都不用安装。
    • 2、命令行:使用 babel-node ,一个 Node.js 的可执行版本,它能运行 ES6 代码(在内部编译成 ES5 )。它能通过 npm 安装。
    • 3、各个 JavaScript 引擎:参考 kangax 的 ES6 兼容表格,这个表格能查出在某个引擎中本地支持哪些 ES6 特性。

    5、新的数值和 Math 特性

    现在可以写二进制和八进制数值字面量:

    > 0xFF // ES5: hexadecimal
    255
    > 0b11 // ES6: binary
    3
    > 0o10 // ES6: octal
    8

    全局对象 Number 上添加了一些新的属性,尤其是:

    • Number.EPSILON 用于比较浮点数,容忍舍入错误。
    • 一个方法和常量,用于判断 JavaScript 整数是否安全(在有符号的53位范围内,没有精度的损失)。

    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 

  • 相关阅读:
    System Idle Process SYSTEM占用CPU
    apache和nginx的rewrite的区别
    解决file_get_contents failed to open stream: HTTP request failed! 错误
    个人总结大型高并发高负载网站的系统架构(转)
    代码的抽象三原则
    mysqldump导入某库某表的数据
    mysql中insert into和replace into以及insert ignore用法区别
    【原创】学习日记4:nginx负载均衡(二)2012.01.08
    【原创】学习日记1:redis安装以及lnmp环境搭建2012.01.06
    mysql优化 mysql.ini优化
  • 原文地址:https://www.cnblogs.com/huansky/p/5666318.html
Copyright © 2011-2022 走看看