前言
【内容】
【目的】
【学习资源】
- 【学习视频】尚硅谷Web前端ES6教程,涵盖ES6-ES11
- 【参考笔记】尚硅谷Web前端ES6教程,涵盖ES6-ES11
ES6
let声明变量
【格式】
let a; //可声明单个变量
let b,c,d; //可声明多个变量
let e=100; //可声明同时为变量赋值
let f=521, g='lao',h=[]; //可赋值为数值、字符串、数组;
【特性】
-
变量不能重复声明
【报错示例】
let a='lao';
let a='jarvee'; -
块级作用域(全局,函数,eval)
- 在代码块里有效,出代码块就无效了(相当于局部变量)
-
不存在变量提升
【报错示例】说明不能在变量声明之前,调用变量
console.log(name);
let name='Lao'; -
不影响作用域链
【示例】说明在同一代码块中,下一级代码块任然可以调用let定义的变量
{
let name = 'lao';
function fn(){
console.log(name);
}
fn();
}
const声明常量
【格式】
const 常量名=常量值
【特性】
-
一定要有初始值
【报错示例】
const A;
-
一般声明使用大写(潜规则)
-
常量值不能修改
【报错示例】
const NAME = 'Lao';
NAME = 'Jarvee'; -
也是块级作用域内有效
【报错示例】
{
const PLAYER = 'Lao';
}
console.log(PLAYER); -
对于对数组和对象里元素修改,不算对常量进行修改 (因为地址没改变)
变量的解构赋值
- 按照一定模式从数组和对象中提取值,对变量进行赋值
数组的解构
【示例】
const NUMBER = ['one','two','three'];
var [a,b,c] = NUMBER;
console.log(a); //输出one
console.log(b); //输出two
console.log(c); //输出three
对象的解构
【示例】
const Lao = {
name:'Jarvee',
age:'21',
doing:function(){
console.log("I am studying ES6");
}
};
let {name,age,word} = Lao;
console.log(name); //输出Jarvee
console.log(age); //输出21
console.log(doing()); //输出I am studying ES6
模板字符串
- ES6引入新的声明字符串的方式反引号(``)
声明
【示例】
let str =`用反引号框起来的内容也是字符串`;
console.log(str,typeof str); //输出 用反引号框起来的内容也是字符串 string
内容中可以直接出现换行符
【报错示例】使用" "
|''
都不能实现换行【解决办法】只能在每一个换行处加入+
连接
let str = '<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>';
【示例】使用反引号可以直接出现换行符
let str = `<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>`;
变量拼接
【格式】
let stringOne="String1";
let stringTwo=`${stringOne}this is String2`
对象的简化写法
- 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法
【示例】用ES6简化写法
let name='Lao'
let doing=function(){
cosole.log('Im coding!!!!');
}
//直接写入变量name
//直接写入函数doing
const Person={
name,
doing,
improve(){
console.log("Leaning ES6");
}
}
【对比上例】过去写法
let name='Lao'
let doing=function(){
cosole.log('Im coding!!!!');
}
const Person={
name:name,
doing:doing,
improve=function(){
console.log("Leaning ES6");
}
}
箭头函数以及声明特点
- ES6允许使用箭头
=>
定义函数
声明一个函数
let fn=function(形参列表){
//函数体
}
//省略function关键字
let fn= (形参列表) =>{
//函数体
}
调用函数
let result=fn(形参列表);
箭头函数与普通函数的区别
【拓展】JavaScript this关键字
面向对象语言中this表示当前对象的一个引用
但在JavaScript中this不是固定不变的,它会随着执行环境的改变而改变。
执行环境 this表示 在方法中 该方法所属的对象 如果单独使用 全局对象 在函数中 全局对象 在函数中,在严格模式下 未定义的( undefined
)在事件中 接收事件的元素 类似 call()
和apply()
方法可以将this引用到任何对象
-
this是静态的,this始终指向函数声明时所在作用域下的this的值
【示例】说明箭头函数的this不可变
//普通函数
function getName(){
console.log(this.name);
}
//箭头函数
let getName2 = ()=>{
console.log(this.name);
}
//设置window对象的name属性,是箭头函数声明所在作用域下的值
window.name = 'lao';
const person = {
//这个name属性不在箭头函数所在作用域下
name:'anthor Man'
}
//直接调用
getName(); //lao
getName2(); //lao
//call方法调用
getName.call(person); // anthor Man
getName2.call(person); // lao -
不能作为构造实例化对象
【报错示例】
let Person = (name,age)=>{
this.name=name;
this.age=age;
}
let me = new Person('lao',21);
console.log(me); -
不能使用
arguments
变量【报错示例】
let fn = () => {
console.log(arguments);
}
fn(1,2,3); -
箭头函数的简写
-
省略小括号,当形参有且只有一个的时候
【示例】
let add = n =>{
return n+n;
}
console.log(add(9)); -
省略花括号,当代码体只有一条语句的时候,此时
return
必须省略- 而且语句的执行结果就是函数的返回值
【示例】
let pow (n)=>{
return n*n;
}
console.log(pow(9));
//用箭头函数简写
let pow = n =>n*n;
console.log(pow(9));
-
箭头函数的应用场景
适合 | 不适合 |
---|---|
与this无关的回调 | 与this有关的回调 |
如定时器,数组的方法回调 | 事件回调,对象的方法 |
函数参数的默认值设置
- ES6允许函数参数赋初始值
形参初始值 具有默认值的参数,一般位置要靠后(潜规则)
【示例】
function add(a,b,c=3){
return a+b+c;
}
let result=add(1,2); //输出 6
console.log(result);
与解构赋值结合
【示例】
//可以给host属性赋初始值,如果对象中host属性没有传,默认为127.0.0.1
function connect({host="127.0.0.1", username,password, port}){
console.log(host)
console.log(username)
console.log(password)
console.log(port)
}
connect({
host: 'laojarvee.com',
username: 'root',
password: 'root',
port: 3306
})
rest 参数
- ES6引入
rest
参数 用来获取函数的实参,代替arguments
【示例】ES5获取实参的方式
function date(){
console.log(arguments);
}
date('白天','中午','黑夜');
-
【获得】一个对象
【示例】ES6使用rest
参数获取实参
function date(...args){
console.log(args);// filter some every map
}
date('早餐','午餐','晚餐');
-
【获得】一个数组,可以对其使用数组的API方法如(
filter
、some
、every
、map
等方法)