ES5
严格模式: "use strict";
严格模式对正常的 JavaScript语义做了一些更改。
严格模式通过抛出错误来消除了一些原有静默错误。
严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。
严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。
八进制不严格报错:
变量未声明报错
数组尾逗号:
-- 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 操作符
剩余参数 当被用于函数传参时,是一个还原操作符
展开运算符 当被用于迭代器中时,它是一个 展开操作符