以前学习JavaScript的时候,对ES5是有了解过的,但是在学习Vue的时候,就会发现有很多新的写法是ES6中的,真是让人捉急。所以今天ES6他来了。原英文文档:https://262.ecma-international.org/6.0/#sec-functiondeclarationinstantiation
W3C中对ECMAScript 6定义:ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了(所以也被叫作ES2015)。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//传统定义变量和常量的方式
var name="败落";
var PI=Math.PI;
console.log(name);
console.log(PI);
//ES6定义的方式
let name2="败落太棒了";
//定义常量
var PI2=Math.PI;
console.log(name2);
console.log(PI2);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
for (var i = 0; i <5 ; i++) {
console.log(i)
}
//这里就会造成变量穿透问题
console.log(i)
</script>
</body>
</html>
注意:正常用 var 写会造成变量穿透问题 是一个很大的坑
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
for (let i = 0; i <5 ; i++) {
console.log(i)
}
//这里就会造成变量穿透问题
console.log(i)
</script>
</body>
</html>
使用 let 常量就可以完美解决这个问题 在下边写的i会报错
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
const PI=Math.PI;
PI=100;
console.log(PI);
</script>
</body>
</html>
使用var定义常量时是可以修改的 使用const不允许被修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--字符串会牵涉到动态部分-->
<!--传统语法-->
<script>
var person={
name:"败落",
address:"河南",
age:18
};
let address="我是"+person.name+",正在"+person.address+"学习es6,今年"+person.age+"岁";
console.log("传统语法:"+address);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--字符串会牵涉到动态部分-->
<!--传统语法-->
<script>
var person={
name:"败落",
address:"河南",
age:18
};
// es6的UI发模板字符串
let address2=`我是${person.name},正在${person.address}学习es6,今年${person.age}岁`;
console.log(`es6语法:${address2}`);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function sum(a,b){
return a+b;
}
var result=sum(100,100);
console.log("result=",result)
result=sum(100);
console.log("result=",result)
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//箭头函数 (重点)
//传统语法
var sum= function (a,b){
return a+b;
}
//箭头函数语法
var sum= (a,b)=>{
return a+b;
}
var sum= (a,b)=> a+b;
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var arr = [1, 2, 3, 4, 5];
// var newarr = arr.map(function (obj) {
// return obj * 2;
// })
//改变
var newarr = arr.map(obj=>obj * 2);
console.log(newarr)
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let person={
name:"败落",
address:"河南",
age:18,
go:function (){
console.log("我骑着小蓝车来公司上班了")
}
};
// ES6简写
var name="败落";
var address="河南";
var age=18;
let person2={
name,
address,
age,
go(){
console.log("我骑着小蓝车来公司上班了")
}
};
console.log(person2.name)
console.log(person2.address)
console.log(person2.age)
person2.go();
</script>
</body>
</html>
因为对象是 key:value 存在
1:如果 key 和变量的名字一样,可以指定一次即可
2:如果 value 是一个函数,可以把 :function
全部去掉,只剩下()即可
对象简写案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="js/jquery-1.12.4.js">
</head>
<body>
<form action="">
<p>账号:<input type="text" name="account" id="account"></p>
<p>密码:<input type="text" name="password" id="password"></p>
<p><input type="button" value="登录" id="loginbtn"></p>
</form>
<script>
$("#loginbtn").click(() => {
let account = $("#account").val();
let password = $("#account").val();
// 对象简写应用场景
let param = {
account,
password
}
//执行异步请求
$.ajax({
method: "post",
url: "xxx",
data: param,
success() {
},
error() {
}
})
})
</script>
</body>
</html>
对象解构----ES6提供了一些快捷获取对象属性和行为的方式
.
获取对象属性和方法[ ]
获取对象属性和方法 var name="败落";
var address="河南";
var age=18;
let person2={
name,
address,
age,
go(){
console.log("我骑着小蓝车来公司上班了")
}
};
//(1)通过.的方式获取属性和方法
console.log(person2.name)
console.log(person2.address)
console.log(person2.age)
person2.go();
//(2)通过[]的方式获取属性和方法
console.log(person2["name"])
console.log(person2["address"])
console.log(person2["age"])
person2["go"]()
//(3)Es6对象解构快速获取
var {name,age,go}=person2;
//还原代码
// var name=person2.name;
// var age=person2.age;
console.log(name,age);
go();
ES6 对象解构其实–其实就是快速获取属性和方法的方式一种形式
...
对象传播操作符使用
...
来表示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//对象传播操作符 ...
let person={
name:"败落",
address:"河南",
age:18,
phone:"123456",
go(){
console.log("开始上班了")
}
};
//解构出来
var {name,address,...person2}=person;
console.log(name);
console.log(address);
console.log(person2);
</script>
</body>
</html>
name
和 address
已经被解构出来了person2
会解构 person
剩下没有被解构的变量和方法通过对象传递操作符,会将解构剩下的变量赋值给新定义的对象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3,4,5,6,7];
let newArr=[];
//传统方法
for (let i = 0; i < arr.length; i++) {
newArr.push(arr[i]*2);
}
console.log(newArr);
//ES6增强语法 map 自带循环,并且会把处理的值回填对应的位置
newArr=arr.map( ele=> ele*2);
console.log(newArr);
//map处理对象数据
let users=[{name:"张三",age:18},{name:"李四",age:15},{name:"王五",age:16}];
let newUsers= users.map(function (ele){
ele.age=ele.age+1;
//给每一个对象增加字段
ele.check=true;
return ele;
});
console.log(newUsers)
</script>
</body>
</html>
ES6增强语法 map 自带循环,并且会把处理的值回填对应的位置
reduce(function(),初始值(可选))
接收一个函数**(必须)** 和一个初始值**(可选)**,该函数接收两个参数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//reduce 计算方法
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
//a=1 b=2 3
//a=3 b=3 6
//a=6 b=4 10
//箭头写法----1到10相加
let newArr = arr.reduce((a, b) => a + b);
//原生写法----1到10相加
let newArr = arr.reduce(function (a, b) {
return a + b
});
console.log(newArr)
</script>
</body>
</html>
Title ~~~reduce() 会从左到右一次把数组中的元素用 reduce 处理,并把处理的结果作为下次 reduce 的第一个参数,如果是第一次,会把前两个元素作为计算参数,或者把用户指定的初始值作为起始参数
reduce() 会从左到右一次把数组中的元素用 reduce 处理,并把处理的结果作为下次 reduce 的第一个参数,如果是第一次,会把前两个元素作为计算参数,或者把用户指定的初始值作为起始参数