ECMAScript是JavaScript的规格
JavaScript是ECMAScript的实现
ES5回顾
JavaScript严格模式(strict mode)
设立严格模式的原因:
1,消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;
2,消除代码运行的一些不安全之处,保证代码运行的安全;
3,提高编译器效率,增加运行速度;
4,为未来新版本的JavaScript做好铺垫。
“use strict”//是进入严格模式的标志
要求:
1,声明定义变量必须用var;
2,禁止自定义的函数中的this关键字指向全局变量;
3,创建eval作用域,更安全。
JSON对象
JSON对象有两个方法,并且JSON通常用于与服务器交换数据。分别为JSON.parse()和JSON.stringify()
JSON.parse()将数据转换为JavaScript对象
JSON.stringify()将对象、数组转换成字符串。
Object扩展
Object.create(prototype,[descriptors])
作用:以指定对象为原型创建新的对象,为新的对象指定新的属性,并对属性进行描述。
为新的对象指定新的属性,并对属性进行描述
value:指定值;
writable:标识当前属性值是否可修改,默认false;
configurable:标识当前属性是否可以被删除,默认false;
enumerable:标识当前属性是否能用for in 枚举,默认false。
Object.defineProperties(object,descriptors)
作用:为指定对象定义扩展多个属性。
get:用来获取当前属性值得到回调;
set:修改当前属性值得触发的回调函数,并且实参即为修改后的值。
Array扩展
var arr=[2,3,3,2,1,5]
console.log(arr.indexOf(3));// 1 得到数组中第一个数字为3的下标
console.log(arr.lastIndexOf(3));//2 得到数组中最后一个数字为3的下标
arr.forEach(function(item,index){
console.log(item,index);
}) // 依次打印 2 0|3 1|3 2|2 3|1 4|5 5| 遍历数组
var arr1=arr.map(function (item,index){
return item+10
})
console.log(arr1)// 12 13 13 12 11 15
//遍历数组返回一个新数组,返回加工之后的值
var arr2=arr.filter(function (item,index){
return item>3
})
console.log(arr2) // 5
//遍历过滤出一个新的数组,返回条件为true的值
Function扩展
Function.prototype.bind(obj)
作用:将函数内的this绑定为obj,并将函数返回。
function fun(age){
this.name='xm';
this.age=age;
}
var obj={};
fun.bind(obj,18)();
console.log(obj.name,obj.age)
ES6简介
let
用法类似于var
es5 全局 函数作用域 没有块级作用域
es6 新增块级作用域 {} let 在{}中使用 包括 for(){} if(){}
let:特点
(1):不能重复声明变量 代表唯一
(2):不会预处理, 不存在提升
var :特点
可以重复声明变量
块级作用域允许任意嵌套,外层作用域无法读取内层作用域的变量,而且内外层作用域可以声明同名变量。
const
const 常量
声明一个常量: const 常量名 = 值;
const 常量特点:
(1):只能声明一次,定义了常量,不能进行修改
(2):常量的命名,用驼峰命名规则,则大写(为了和变量区分开来) 多个单词用_隔开
(3):声明常量,就要确定常量的值
(4):const 只在代码块内有效。
模板字符串
字符串解析
//es5:拼接字符串 解析字符串 "++" +加号做的拼接
// es6:字符串解析 `` 反引号 内容解析 ${对象.属性}
let obj = {
name:"小红",
age:20,
}
console.log("名字:"+obj.name+"你的年龄:"+obj.age); //es5
console.log("------------");
console.log(`名字:${obj.name}你的年龄:${obj.age}`); //es6
简化的对象写法
ES6允许直接写入变量和函数,作为对象的属性和方法
箭头函数
es6允许用箭头(=>)声明函数,更加快捷方便。
()=>{ }等价于 function(){}
箭头函数
(1):方便 简洁
let 声明一个变量 = ()=>console.log("只是输出一句话 ");
(2):没有形参,有且只有一句话输出的时候,可以省略{} 大括号开始大括号结束
let 声明一个变量 = (x)=>x+1
(3)有参数,有且只有一个参数可以省略{} 大括号开始大括号结束 也可以省略return
let 声明一个变量 = (x,y,z)=>x+y+z
(4):有多个参数,且只有一个函数体输出 可以省略{} 可以省略return 返回
let 声明一个变量 = (a,b,c)=>{
函数体
}
(5)有多个参数,且函数体里有多条输出的语句,return 不能省略;
(6):箭头函数没有自己的this,而是依赖于上层对象是谁,箭头函数的this就是谁。
箭头函数注意事项:
1,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象;
2,不可以当作构造函数,不可以使用new命令,否则报错;
3,不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用rest参数代替。
扩展运算符
扩展运算符(spread)是三个点(…)。好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。
function fn(a,...value)
{
console.log(arguments); //Arguments { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6,6: 7, 7: 8, … }
console.log(a);//1
console.log(value); //Array(7) [ 2, 3, 4, 5, 6, 7, 8 ]
value.forEach(function(item,index){
console.log(index+"---"+item);
})
}
fn(1,2,3,4,5,6,7,8);