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学习4-数据类型
redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...
- Linux命令:unzip
语法: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 默认行为将zip文件中的内容全部解压缩到当前目录下. ...
- 使用git pull与本地文件冲突
出错信息如下: error: Your local changes to 'c/environ.c' would be overwritten by merge. Aborting. Please, ...
- 如何用java读取properties文件
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地 ...
- CHAR 和VARCHAR的区别
CHAR(10)是不可变长度为10的字符串,占的存储空间始终为10个字符的长度,而VARCHAR(10)是可变长度的字符串,故而可以节省空间.例如:储存"aaaaabbbbb",则 ...
- 浅析SQL Server 中的SOS_SCHEDULER_YIELD类型的等待
本文出处:http://www.cnblogs.com/wy123/p/6856802.html 进程的状态转换 在说明SOS_SCHEDULER_YIELD等待之前,先简要介绍一下进程的状态(迷迷糊 ...
- 微信定时获取token
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...
- 小程序:pages/index/index/出现脚本错误或未正确调用Page()
第一次尝试玩小程序,配置好以后报错.pages/index/index/出现脚本错误或未正确调用Page() 才发现解决的方式是:新建的文件默认是没有page()的,所以你需要在.js文件中加上Pag ...
- C# 递归获取 文件夹的 所有文件
public void Director(string dir, List<string> list) { DirectoryInfo d = new DirectoryInfo(dir) ...
- EF 踩过的坑
ef + mysql-8.0.12-winx64 这个版本的mysql,当一个类为树型结构,会迁移报错. 数据迁移提示:No connection string named 'TaoBaoEntiti ...