es6学习笔记1
最近在阅读《探索es6》,就把自己认为重要的做一点笔记,方便日后学习。
1、获取更多的es6资源的办法
有两组 ES6 资源:
- “ ECMAScript 6 Tools ”,作者 Addy Osmani 。
- “ ECMAScript 6 Learning! ”,作者 Eric Douglas 。
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 > 0b11 // ES6: binary > 0o10 // ES6: octal
全局对象 Number 上添加了一些新的属性,尤其是:
Number.EPSILON用于比较浮点数,容忍舍入错误。- 一个方法和常量,用于判断 JavaScript 整数是否安全(在有符号的53位范围内,没有精度的损失)。
parseInt() 并没有对八进制或二进制字面量特殊支持!
如果想解析这种字面量,应该使用 Number();
或者,也可以移除前缀,然后使用 parseInt() ,传入适当的 radix 参数;
//**************************
> parseInt('0b111') > parseInt('0b111', ) > parseInt('', ) > parseInt('0o10') > parseInt('0o10', ) > parseInt('', ) //**************************
> Number('0b111') > Number('0o10') //**************************
> parseInt('', ) > parseInt('', )
四个数值相关的全局函数已经添加到 Number 下面了,这些方法是: isFinite 和 isNaN , parseFloat 和parseInt 。所有方法都表现得基本跟对应的全局函数一样,但是 isFinite 和 isNaN 不需要它们的参数是数字。
Math.sign(x) 返回 x 的符号,-1或+1。如果 x 是 NaN 或者零,则返回 x
es6学习笔记1的更多相关文章
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- ES6学习笔记<一> let const class extends super
学习参考地址1 学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...
- ES6学习笔记之块级作用域
ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.l ...
- ES6学习笔记之变量的解构赋值
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...
- ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
随机推荐
- 区间DP石子合并问题 & 四边形不等式优化
入门区间DP,第一个问题就是线性的规模小的石子合并问题 dp数组的含义是第i堆到第j堆进行合并的最优值 就是说dp[i][j]可以由dp[i][k]和dp[k+1][j]转移过来 状态转移方程 dp[ ...
- hdu 1.3.2 Moving Tables
这道题比较简单,就是用数组存取其路径.如101和102是对门,其过道号可以记为51. 1和2之间的为1. 今早突然收到操作系统停课的通知,哈哈 回来就做一下水题,开心 #include<cst ...
- MAC系统下用Idea创建spring boot工程 基于maven
1.创建项目 打开idea编辑器,选择file -> new -> project 点击next 依次填入group,artifact 填写完成之后再点击“next” 根据自己的需求在最 ...
- MVC 5 Strongly Typed Views(强类型视图)
学习MVC这样久以来,发觉网站上很多MVC的视频或是文章,均是使用Strongly Type views来实现控制器与视图的交互.Insus.NET以前发布的博文中,也大量使用这种方式: <Da ...
- MariaDB 备份与日志管理(13)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- MySQL随手记
一.MySQL数据迁移(由远端主机迁移到本地) 1.导出数据库mysqldump -u root -p db > dump_db_date.sqlroot: 账户db: 需要导出的数据库名 2. ...
- ASP.NET Core 2.0 多应用实现Cookie共享
前言 .NET Core 2.0 发布之后,在Authentication中间件部分,相关API有不少改动(官方文档),本文主要讲的就是实现应用Cookie共享,对Cookie中间件使用不了解的可以去 ...
- [vuejs] 深入响应式原理
深入响应式原理 现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接 ...
- D16——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...
- Windows Phone开发手记-WinRT下启动器替代方案
在WP7/8时代,Silverlight框架提供了很多启动器API,我们可以很方便的使用的,来完成一些系统级的操作.但是随着Win RT架构的WP8.1(SL 8.1除外)的到来,原有的SL下的启动器 ...