ES5/6/7
ECMAScript(js语言规范)
###ES5
1. 严格模式
运行模式: 正常(混杂)模式与严格模式
应用上严格模式: ‘strict mode’
2、JSON对象
* JSON.stringify(obj/arr)
js对象(数组)转换为json对象(数组)
* JSON.parse(json)
json对象(数组)转换为js对象(数组)
3. Object 扩展
Object.create()以指定对象为原型创建新的对象
指定新的属性 并对属性进行描述
* value : 指定值
* writable : 标识当前属性值是否是可修改的, 默认为true
* **get方法** : 用来得到当前属性值的回调函数
* **set方法** : 用来监视当前属性值变化的回调函数
* Object.defineProperties(object, descriptors) : 为指定对象定义扩展多个属性
4. Array 扩展
* Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
* Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
* **Array.prototype.forEach(function(item, index){}) : 遍历数组**
* **Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组**
* **Array.prototype.filter(function(item, index){}) : 遍历过滤出一个子数组**
5. Function扩展
6. Date扩展
* Date.now() : 得到当前时间值
#####ES6
1. let / const
* 块作用域
* 没有变量提升
* 不能重复定义
* 值不可变
2. 变量解构赋值
对象数组赋值
[a,b,c] = [1,2,3]
如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候才会求值。
3. 模板字符串
* contains(str) : 判断是否包含指定的字符串
* startsWith(str) : 判断是否以指定字符串开头
* endsWith(str) : 判断是否以指定字符串结尾
* repeat(count) : 重复指定次数
* 对象
* **简化的对象写法**
```
let name = 'Tom';
let age = 12;
let person = {
name,
age,
setName (name) {
this.name = name;
}
};
```
* Object.assign(target, source1, source2..) : 将源对象的属性复制到目标对象上
* Object.is(v1, v2) : 判断2个数据是否完全相等
* __proto__属性 : 隐式原型属性
* 数组
* Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
* Array.of(v1, v2, v3) : 将一系列值转换成数组
* find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
* findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
* 函数
* **箭头函数**
* 用来定义匿名函数
* 基本语法:
* 没有参数: () => console.log('xxxx')
* 一个参数: i => i+2
* 大于一个参数: (i,j) => i+j
* 函数体不用大括号: 默认返回结果
* 函数体如果有多个语句, 需要用{}包围
* 使用场景: 多用来定义回调函数
* **形参的默认值**
* 定义形参时指定其默认的值
* **rest(可变)参数**
* 通过形参左侧的...来表达, 取代arguments的使用
* **扩展运算符(...)**
* 可以分解出数组或对象中的数据
4. set/Map容器结构
* 容器: 能保存多个数据的对象, 同时必须具备操作内部数据的方法
* 任意对象都可以作为容器使用, 但有的对象不太适合作为容器使用(如函数)
* **Set的特点**: 保存多个value, value是不重复 ====>数组元素去重
* **Map的特点**: 保存多个key--value, key是不重复, value是可以重复的
* API
* Set()/Set(arr) //arr是一维数组
* add(value)
* delete(value)
* clear();
* has(value)
* size
*
* Map()/Map(arr) //arr是二维数组
* set(key, value)
* delete(key)
* clear()
* has(key)
* size
5. **for--of循环**
* 可以遍历任何容器
* 数组
* 对象
* 伪/类对象
* 字符串
* 可迭代的对象
6. **Promise**
* 解决`回调地狱`(回调函数的层层嵌套, 编码是不断向右扩展, 阅读性很差)
* 能以同步编码的方式实现异步调用
* 在es6之前原生的js中是没这种实现的, 一些第三方框架(jQuery)实现了promise
* ES6中定义实现API:
```
// 1. 创建promise对象
var promise = new Promise(function(resolve, reject){
// 做异步的操作
if(成功) { // 调用成功的回调
resolve(result);
} else { // 调用失败的回调
reject(errorMsg);
}
})
// 2. 调用promise对象的then()
promise.then(function(
result => console.log(result),
errorMsg => alert(errorMsg)
))
```
7. **class类**
* 用 class 定义一类
* 用 constructor() 定义构造方法(相当于构造函数)
* 一般方法: xxx () {}
* 用extends来定义子类
* 用super()来父类的构造方法
* 子类方法自定义: 将从父类中继承来的方法重新实现一遍
* js中没有方法重载(方法名相同, 但参数不同)的语法
8. **模块化(后面讲)**
## ES7
* 指数运算符: **
* Array.prototype.includes(value) : 判断数组中是否包含指定value
* **区别方法的2种称谓**
* 静态(工具)方法
* Fun.xxx = function(){}
* 实例方法
* 所有实例对象 : Fun.prototype.xxx = function(){} //xxx针对Fun的所有实例对象
* 某个实例对象 : fun.xxx = function(){} //xxx只是针对fun对象
ES5/6/7的更多相关文章
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- ES5概述(ECMAScript262/5.1)
ES5概述(ECMAScript262/5.1) 本文参考:ES5概述 ECMAScript 是基于对象的: 基本语言和宿主设施都由对象提供,ECMAScript 程序是一组可通信的对象.ECMASc ...
- 【转】浅谈JavaScript、ES5、ES6
什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...
- 常见ES5方法
• ES5 JSON扩展JSON.parseJSON.stringify • ES5 Object扩展Object.createObject.keys • Date对象Date.now • ES5 F ...
- 关于es5的一些新方法
1.数组方法(1)isArray在之前我们判断数组类型的数据都是用instanceof来判断的,es5新增了对数组的判断,即Array.isArray()(2)every和some这两个方法一般用于对 ...
- ES5新语法forEach和map及封装原理
### forEach 在es5中提供了forEach方法进行遍历,其实就是模仿了jQuery中each方法,不过将 i 于v进行了调换,下面两种方法进行对比一下 var arr = [ 11, 22 ...
- webstorm ES6 转 ES5
一句话总结:用WebStorm自带的File Watcher功能+Babel实现自动转换ECMAScript 6代码为ES5代码 1. 新建一个Empty Project,然后在src目录下新建了一个 ...
- React,React Native中的es5和es6写法对照
es6用在React中的写法总结: 在es6还没有完全支持到浏览器的阶段里,已经有很多技术人员开始用es6的写法来超前编程了,因为有转义es6语法的工具帮助下,大家才可大量使用.解析看看es6写法用在 ...
- 一些ES5的操作数组的方法
在ES5规范中新增了不少操作数组的方法,特此罗列一下以备使用 1. forEach循环 有点类似jQuery的each循环 [12,23,36,4,5].forEach(function(v,k){ ...
- es6转es5
一.在没有IDE情况下的转换 在"我的电脑->D盘”新建个文件夹es6,文件夹里新建一个文件es6.js. 打开命令行窗口 1.先全局安装babel-cli,输入命令 npm inst ...
随机推荐
- 尚硅谷redis学习2-redis的安装和HelloWorld
Reids: remote dictionary server redis特点:支持持久化,支持复杂数据类型,支持备份 下载: 解压: 执行make, make install 可能会需要安装make ...
- Mac下的SecureCRT使用技巧
1.secureCRT session manager 怎么添加到标题栏里? Options - Global Options - General 把 Use dockable session man ...
- $event Object angularjs
You can pass the $event object as an argument when calling the function. The $event object contains ...
- Haskell语言学习笔记(82)Extensible effects
安装 extensible-effects $ cabal install extensible-effects Installed extensible-effects-3.0.0.0 Extens ...
- ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理
ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理 计划时间:第二天下午 背景:数据量大,工程大 目的:自动化,批处理,定制业务流程,不写程序 教程:Pdf/343 数据:chap8/ex5 ...
- mysql 查询上个月某一天
本文地址:http://www.cnblogs.com/jying/p/8877065.html 需求:获取上个月15号的日期 网上一搜一大堆粘贴复制的大坑:(如下是查询上个月最后一天,可是我要的不一 ...
- datagridview表头全选
参与程序http://www.codeproject.com/KB/grid/CheckBoxHeaderCell.aspx 这里老外写的一个控件,他少了委托重载的一个方法.先写一个控件 public ...
- 手动安裝TMG2010所需Windows服务和功能
安装 Forefront TMG 之前,必须运行准备工具,以验证是否已在您的计算机上安装成功安装 Forefront TMG 所需的应用程序.如果在未首先运行准备工具的情况下运行 Forefront ...
- tensorflow 训练cifar10报错
1.AttributeError: 'module' object has noattribute 'random_crop' 解决方案: 将distorted_image= tf.image.ran ...
- Winform 对话框
ColorDialog:显示可用颜色,以及用户可以自定义颜色的控件,以调色板对话框形式出现,可选择更改字体颜色 FolderBrowserDialog:显示一个对话框,提示用户选择文件夹 FontDi ...