前言:这里学习es6我采用的前端工具室webstorm
下载地址:https://www.jetbrains.com/webstorm/
安装过程与IDEA完全一致,激活码到万能的百度上去找,在这里我就不过多的介绍了;
在es6中,引入了let和const关键字;
let关键字是用来取代var的;
let作用,与var类似,用于声明一个变量;
特点:
1,在块级作用域里有效(比如循环遍历内部就可以用let定义变量)
实例:
{ let a='http://47.100.191.44'; var b='小李飞刀'; console.log(b); console.log(a); } console.log(b); console.log(a);
报错:ReferenceError: a is not defined
2、不能重复声明
{ let a='http://47.100.191.44'; let a= "http://baidu.com"; var b='小李飞刀'; var b = "百度"; console.log(b); console.log(a); } console.log(b); console.log(a);
SyntaxError: Identifier 'a' has already been declared
3,不存在变量提升
{ let a='http://47.100.191.44'; // let a= "http://baidu.com"; var b='小李飞刀'; // var b = "百度"; console.log(b); console.log(a); } console.log(b); // console.log(a); console.log(c); var c = "晓码阁"; console.log(d); let d = '学员';
ReferenceError: Cannot access 'a' before initialization
4,const关键字用来定义常量
<script type="text/javascript"> { let a='http://47.100.191.44'; // let a= "http://baidu.com"; var b='小李飞刀'; // var b = "百度"; console.log(b); console.log(a); } console.log(b); // console.log(a); console.log(c); var c = "晓码阁"; // console.log(d); // let d = '学员'; const e = 5; console.log(e); e = 6; </script>
TypeError: Assignment to constant variable.
const定义的变量,不可改变,其他特性和let一样;
es6对象定义简写
es6提供了对象定义里的属性,方法简写方式;
我们来看个实例,首先定义两个属性,然后再定义一个对象,里面用到属性赋值,以及再定义一个对象方法;
OK,我们来测试下吧,以及看下运行结果;
es6简写方式,假如属性和变量名一样,可以省略,包括定义对象方法function也可以省略;
<script type="text/javascript"> let name='xiaoli'; let age=20; //之前Javascript代码的写法 // let obj={ // name:name, // age:age, // getName:function(){ // return this.name; // } // }; //目前ES6的写法 let obj={ name, age, getName(){ return this.name; } }; console.log(obj); console.log(obj.getName()); </script>
es6 模版字符串主要用于简化字符串的拼接;
看个例子,es6以前的写法;
我们来看下实例;定义一个变量,搞两个属性,然后控制台输出;
如果属性多,那拼接量就大了;
看下 es6模版字符串写法 用 斜引号和${}符号实现;
let obj={name:'小李',age:'20'}; //原来javascript写法 let str='姓名:'+obj.name+',年龄:'+obj.age; console.log(str); //ES6写法 let esStr=`姓名:${obj.name},年龄:${obj.age}`; console.log(esStr);
这样就省力多了;
注意点:这个斜引号,再tab键上方;
在es6中,推出了一个新语法 箭头函数;
以前定义一个函数,是这么定义的;
let fun=function(){
console.log('我是箭头函数');
};
现在可以简化下,用箭头函数:
let fun=()=>{console.log('我是箭头函数')};
然后假如函数体只有一条语句或者是表达式的时候{}可以省略
let fun=()=>console.log('我是箭头函数');
加形参情况;
let fun2=(a)=>console.log(a);
只有一个形参的时候 ()可以省略
改成:
let fun2=a=>console.log(a);
多个形参:
let fun3=(x,y)=>console.log(x,y);
fun3(20,30);
有返回值情况:
let fun6=(x,y)=>{
console.log(x,y);
return x+y;
}
console.log(fun6(1,3));
关于 箭头函数里的this;(重点)
箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是再定义的时候所在的对象就是它的this
箭头函数的this看外层是否有函数,
如果有,外层函数的this就是内部调用箭头函数的this
如果没有,则this是window
<script type="text/javascript"> let btn1=document.getElementById('btn1'); let btn2=document.getElementById('btn2'); btn1.onclick=function(){ console.log(this); }; btn2.onclick=()=>{ console.log(this); } </script>
可以看出 点击 按钮1 这里的this是 调用的时候的btn1对象;
而点击按钮,this是window对象;
再来个复杂点的实例,来深入理解下:
箭头函数搞到定义对象的回调函数里;
<button id="btn1">按钮1</button> <button id="btn2">按钮2</button> <script type="text/javascript"> let btn1=document.getElementById('btn1'); let btn2=document.getElementById('btn2'); //this外层方法的this,也就是this.getName中this代表的对象,这里就是指的person1 let person1={ name:'小李飞刀', getName(){ btn1.onclick=()=>{ console.log(this); } } }; person1.getName(); //this指的是当前的被点击的html元素,在这里就是<button id="btn2">按钮2</button> let person2={ name:'晓码阁', getName(){ btn2.onclick=function(){ console.log(this) } } }; person2.getName(); </script>
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有