ECMA -> ECMAScript -> ES
标准规范
ES6: js的第6套标准规范
var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明。
//var a //会将第三行的var a提到最前面,提前声明变量
console.log(a); //undefined
var a = 1; //有var才提升
console.log(a); //1
let
1.关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用,存在块级作用域。
2.同一个作用域下,不允许重复声明同一个变量
console.log(a); //引用报错ReferenceError:
let a = 1; //let不再存在提升
console.log(a); //1
大括号之间的语句块就是一个块级作用域,例如:if、else、while、do-while、for…
在块级作用域下,let和const声明的都是局部的,无法被块级作用域以外访问到。
{
//块级作用域
var c = 3;
let d = 4;//局部变量
const e = 5;//局部常量
}
console.log(e);
function fn(a, b, c=0) {
//es6之前设置参数的默认值方式
//c = c || 0;
console.log(a, b, c);
}
fn(10000,2000,500);
//未出现的实参就会使用默认值
fn(10000,2000);//1000,2000,0
fn(10000);//NaN
()=>{ }
简化了匿名函数的写法(去掉function,小括号和大括号之间使用箭头),不等价于匿名函数
var arr = [23,9,78,6,45];
arr.sort( (a,b)=>{
return a-b;
} )
箭头函数的函数体重只有一行代码,并且是return形式,简化为:
arr.sort((a,b)=>a-b)
示例:用箭头函数求三个数的平均值
//方法一
var pingjun=(a,b,c)=> {
return (a+b+c)/3;
};
//方法二
var pingjun= (a,b,c)=> (a+b+c)/3;
console.log(pingjun(1,2,3));
解决了字符串的拼接问题
\` 模板字符串 ${
JS表达式} \`
反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
// 普通字符串
console.log(`In JavaScript '\n' is a line-feed.`)
// 多行字符串
console.log(`In JavaScript this is
not legal.`)
var name = "ERYA", time = "tomorrow";
console.log(`
Hello ${
name},
how are you ${
time}?
`);
练习:声明变量保存一条员工的数据,格式为对象,包含的属性有编号,姓名,性别(1/0),工资;最后打印出以下格式
var emp = {
eid: 2,
ename: 'erya',
sex: 0,
salary: 50000
};
console.log(`
编号:${
emp.eid}
姓名:${
emp.ename}
性别:${
emp.sex ? '男' : '女'}
工资:${
emp.salary.toFixed(2)}元
`);