web挖坑之路

ES5 ES6

2018-09-07  本文已影响17人  不知道取个什么昵称不如娶个媳妇

ES5

严格模式: "use strict";

严格模式对正常的 JavaScript语义做了一些更改。

严格模式通过抛出错误来消除了一些原有静默错误

严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快

严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。

八进制不严格报错:

"use strict" 结果

变量未声明报错

注释严格模式声明字符串 未声明变量可以使用 声明严格模式 报错

数组尾逗号:

-- ES5中允许在数组的末尾有一个多余的尾逗号(即最后一个逗号之后可以没有元素)

[,,,].length = ?

-- ES5及之后:3

-- ES5前:4

{

name : value,

key : value,

method : function() {},

}

代码 结果 代码 结果

Array 新增API 参考链接

var array = new Array()

array.forEach(function(currentValue, index, arr){})

array.map(function(currentValue, index, arr){})

["3", "5", "7", "1"].map(parseInt)//parseInt(数值,进制)

array.some(function(currentValue, index, arr){})

array.every(function(currentValue, index, arr){})

array.filter(function(currentValue, index, arr){})

array.indexOf(elem, fromIndex)

array.lastIndexOf(elem, fromIndex)

array.reduce(function(sum, currentValue, index, arr){}, init)

array.reduceRight(function(sum, currentValue, index, arr){}, init)

Array.isArray()

-- 判断参数是否为数组

Array.from()

-- ES6中,从一个类似数组或可迭代对象中创建一个新的数组实例

String 新增API

trim()

-- 去掉字符串前后空白

-- 兼容:string.replace(/^\s+|\s+$/g, "")

代码 结果

Date 新增API

Date.now()

date.toISOString()

-- YYYY-MM-DDTHH:mm:ss.sssZ

date.toJSON()

-- YYYY-MM-DDTHH:mm:ss.sssZ

代码 代码 代码 代码

JSON(ES5新增内置对象)

在 JSON 文本中,字符串一定要用""(双引号)包含。对象的属性名本质上是字符串,所以在 JSON 文本中表示对象时,必须使用 "" 将对象属性名包含。

JSON.stringify()

-- 将JS值转换为JSON文本格式的字符串

JSON.parse()

-- 将JSON文本转换为 JS 值

代码

this

-- 指代一个对象,执行上下文环境中的当前对象

-- 通常情况下,谁调用,指向谁

-- 在事件函数中的 this 通常指向的是绑定事件的事件源元素

-- 在构造函数中的 this 通常指向的是 new 所创建出来的对象本身

Function.prototype.bind(thisArg)

-- 返回一个新函数,该新函数体的内容和原函数内容完全一致,但当新函数被调用时,函数体中的 this 指向的是 thisArg 参数所表示的对象

-- 事件委派:如果需要将事件处理程序中的 this 改为最初触发事件的事件源元素,则需要修改 this 指向

代码 结果 代码 结果 代码 结果

ES6

内置对象新增API

Array:

Array.from()

-- 将类数组对象转换为数组返回

array.fill()

-- 将数组元素填充指定值

代码 代码

String:

startsWith()

-- 方法用来判断当前字符串是否是以另外一个给定的子字符串“开头”的 ,是 返回true 否false

endsWith()

-- 方法用来判断当前字符串是否是以另外一个给定的子字符串“结尾”的 ,是 返回true 否false

代码

Number:

Number.parseInt()

Number.parseFloat()

等等。。。。

新增Map集合

用于存储 key-value 键值对

创建:new Map()

API:

Map.prototype.size -- 集合长度

Map.prototype.clear() -- 清空

Map.prototype.delete(key) -- 删除,根据 key 删除 key-value 映射

Map.prototype.entries() -- 返回所有的 key-value 映射

Map.prototype.forEach() -- 遍历迭代集合中每对 key-value

Map.prototype.get(key) -- 根据 key 获取对应的 value

Map.prototype.has(key) -- 判断集合中是否存在 key 所映射的 value

Map.prototype.keys() -- 返回所有键的集合

Map.prototype.set(key, value) -- 设置,向集合中保存 key-value 映射

Map.prototype.values() -- 返回所有值的集合

新增Set集合

用于存储各类型的唯一值,通常我们认为 Set 集合中的元素是无序的

创建:new Set();

API:

Set.prototype.size -- 长度

Set.prototype.add() -- 添加,保存元素

Set.prototype.clear() -- 清空

Set.prototype.delete() -- 删除

Set.prototype.entries() -- 集合

Set.prototype.forEach() -- 遍历

Set.prototype.has() -- 判断是否存在

Set.prototype.values() -- 所有值

for...of和for ... in两者之间差别

for...of

for(var i of arr)//其中i的类型是数字,值是数组的元素值

for ... in

for(var i in arr)// 其中i的类型是字符,值是数组的下标

Symbol 符号

var sym = Symbol();

模板字符串

`hello

${exp}//占位符

world`

块级作用域

let 变量名 = 变量值;

const 变量名 = 变量值; -- 定义常量

没有声明提升

暂存死区

IIFE //自执行函数

let 关键词声明的变量不具备变量提升(hoisting)特性
let 和 const 声明只在最靠近的一个块中(花括号内)有效
当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
const在声明时必须被赋值 

箭头函数:使用括号包裹参数,跟随一个 =>,紧接着是函数体

是函数表达式的简写方式

箭头函数不会绑定自己的 this、arguments、super、new.target

箭头函数不能作为构造函数使用

function (curr){return exp}

简化

(curr,) => {;return exp}//当参数为多个,函数主体语句为多条的时候

curr =>{;return exp}//当参数为一个,函数主体语句为多条的时候

curr => exp//当参数为一个,函数主体语句为 return exp的时候

解构赋值:解构可以避免在对象赋值时产生中间变量

var [a,b, ...c] = array;

-- 将数组中第一个元素赋值给变量a, 第二个元素赋值给变量 b,剩余元素(子数组)赋值给c

var {name, key, method} = object;

-- 将 object.name 属性值赋值给变量 name,将 object.key 属性值赋值给变量 key,将 object.method 属性值赋值给变量 method

... Spread / Rest 操作符

剩余参数     当被用于函数传参时,是一个还原操作符

展开运算符  当被用于迭代器中时,它是一个 展开操作符

上一篇下一篇

猜你喜欢

热点阅读