Es6最新常用知识宝典(能够帮助你解决面试题困惑,编写程序中出现的问题等)

常用知识宝典全部用案例实现并解析:

原始用var在for循环中定义初始值   

     // 1,let arr=[];
            // for(var i=0;i<3;i++){
            //     arr[i]=function(){
            //         console.log(i);
            //     }
            // }
            // arr[0]();
            // arr[1]();
            // arr[2]();
            //最终结果为3,3,3

 这里是用let定义了一个空数组,利用for循环控制并且对齐逐打印出结果,而如今的的es6是是通过let来定义的初始值,让我们一起来看看结果有什么不同吧!!!

      // let arr=[];
            // for(let i=0;i<3;i++){
            //     arr[i]=function(){
                    
            //         console.log(i);
            //     }
            // }
            // arr[0]();
            // arr[1]();    
            // arr[2]();
            //最终结果为0,1,2  

 解析:因为他会向父级逐一的获取值,切记不能直接在函数内再次定义变量,那样会报错  报错原因是未申明后使用

             // let i=1;
            // if(true){
            //     let i=2;
            //     console.log('内部i:'+i) //2
            // }
            // console.log('外部i:'+i)  //1
            
            // 3,暂时性死区
            // if(true){
            //     i=0;
            //     let i=2;
            // }//这里直接报错,这是因为为遵循先申明后使用的原则

  作用域的区域所获得的值  分清全局作用域与局部作用域 

           // if(true){
            //     i=0;
            //     let i=2;
            // }//这里直接报错,这是因为为遵循先申明后使用的原则

这里是短暂性死循环,其主要的含义是,在未进行声明就直接进行了使用,其次let不存在变量提升 而原始的var是有的,可以先进行声明变量

	 let i=0;
	 let i=2;//这样会报错
			
	//但是这种是可以的,例如:
	let i=0;
	 i=2;
	//这是可以的

 变量的申明不能重复 

   // const Person={
            //     renlname:"张三",age:"18",
            // }
            // console.log(Person);
            // 打印出来得是一个完整的对象内部的值
            // const Person={
            //     renlname:"张三",age:"18",
            // }
            // Person.renlname='李四';
            //这样是可以的     但是不能这样写
          // const    Person();
          //会报错
            
            // console.log(Person);

 const申明的变量为常量 不可以更改的

        // 解构赋值
            //交换两个值
            // 1:数值的解构赋值
            // let a=1;
            // let b=2;
            // [b,a]=[a,b]
            // console.log(a,b); //2  1
            
            // 2:数组解构
            // let arr=[1,2,3,4]
            // let [a,b,c,d] = arr;
            // console.log(a,b,c,d);
            //结果为1  2  3  4
            
            
            // 2:二维数组解构
            // let arr=[1,2,[3,4,5],6]
            // let [a,b,[c,d,e],f]=arr;
            // console.log(a,b,c,d,e,f);
            //最终结果为1 2 3 4 5 6

解构函数的传值  

// let[a,b,,c]=[1,2,3,4]
              // console.log(a,b,c);
            //最终结果为1 2 4

省略变量

    // let[a,...c]=[1,2,3,4,5]
            //  console.log(a,c);            
            //结果为1 [2, 3, 4, 5]

 合并成数组的值

           // let [a,b]=[1]
            // console.log(a,b)

//根据上面的数组可得,少了一位值,那么打印出来的是undefined 最终结果为1 undefined  但是如果这样的话
            // let [a,b=0]=[1]
            // console.log(a,b)
            //那么打印出来的是1 0 只有当少一位  给定一个默认值时才会起到作用,否则不会使用 依旧是undefined

默认数组 

    // let Person={realname:'张三',age:19}
            // let {realname,age}=Person;
            // console.log(realname,age);
            // 最终结果为张三 19

 对象解构

// let Person={realname:'张三',age:19}
            //这里的重命名是这样的   先将usename赋给realname然后再将值赋给usename,所以如果只打印realname:usename
            // 那么为0,因为还没有赋值
            // let {realname:usename,age}=Person;
            // console.log(usename,age);
            //那么结果为:张三  19

重命名 

    //  function fnc(){
            //      return [1,2,3];
            //  }
            // let [a,b,c]=fnc();
            // console.log(a,b,c);
            //最终结果为1 2 3
            

 结构函数

关于this的指向:

// function globle(){
            //     console.log(this);
            // }
            // globle();
            //这里的结果为window

 全局函数下的this  箭头函数里的this是静态的  而普通函数下的this跟调用者有关

    // const globle=()=>{
            //     console.log(this);
            // }
            // globle();
            //最终结果也是window

 箭头函数下的this是静态  主要根据上下文的this

// const Person={
            //     uname:'张三',
            //     age:19,
            //     say:()=>{
            //         console.log(this);
            //     }
            // }
            // Person.say();
            // 这里打印的是window

 对象方法里面的this

// function Person(realname,age){
            //     this.realname=realname;
            //     this.age=age;
            //     this.say=()=>{
            //         console.log(this);//这个this不会 当时new 实例是谁就是谁
            //     }
            //         this.say1 = function(){
            //             console.log(this);
            //         }
            // }
            // const temp= new Person("张三",20);
            //     const temp1= new Person("李四",21);
            // // temp.say();
            // temp.say.call(temp1);
            // temp.say1.call(temp1);

 构造函数的this就是当前的实例

箭头函数里的this一旦被定义了是不能发生改变的

数组对象解构:

// const pig=[
        //     {
        //         uname:'佩奇',
        //         age:'6',
        //     }
        // ]    
        // //获取
        // const [{uname,age}]=pig
        // console.log(uname);
        // console.log(age);
        //最终结果为 佩奇  6    

     对象解构的  重命名  旧变量名:新变量名
    运用了数组中包含对象的方式

多级对象的解构:

    // const pig={
        //     name:'佩奇',
        //     family:{
        //         mother:'猪妈妈',
        //         father:'猪爸爸',
        //         sister:'乔治',
        //     },
        //     age:16
        // }
        // const {name,family:{mother,father,sister},age}=pig
        // console.log(name)
        // console.log(father)
        // console.log(sister)
        // console.log(age)
        //打印出的结果为:佩奇  猪爸爸   乔治  16

对象重命名:

// const pig={
        //     name:'佩奇',
        //     age:20,
        // }    
        // const {name:username,age} = pig
        // console.log(username,age);
            //打印出的结果为 佩奇  20
        //对象的重命名 

  let、const、var 的区别:

- 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象

- 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升

- 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值

- 使用let,const的声明的变量不属性顶层对象,返回undefined。

在工作中以上知识点都是常用的,关注博主,每日都会为大家最新最全知识

下面是关于上面最后一个改变this指向的详细信息,可以点击进入阅览:

https://www.runoob.com/w3cnote/js-call-apply-bind.html

下面给大家展示一个案例,方便大家更好的理解this的指向

HTML内容部分:

<button id="btn">未点击</button>

js内容部分:

	
				let btnObj = document.querySelector("#btn");
				let flag = false;
				
				btnObj.addEventListener("click",function(){
					flag = !flag;
					
					if(flag){
						 setTimeout(()=>{
							console.log(this);
						this.innerText="已点击";//这个this原指向的是window但通过使用箭头函
    //数让他指向点击按钮
						},1000)
					}else{
						  this.innerText="未点击";//这里的函数包含在点击按钮之内,所以this指向window
					}
					
				})

很多小伙伴肯定有疑问,为何第一个this.innerText="已点击";原指向window,因为 setTimeout()定时器 前面有个window调用的。但现在使用了箭头函数是不会发生改变的,所以指向的是点击按钮。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

共创splendid--与您携手

鼓励会让我为您创造出更优质作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值