Es6

一.Es6初识

es6 就是js
准确来说 es6 是 js 的语法规范
之前所学的是 js5 的第五代版本
es6(ECMAscript)是 2015年 6月 由欧洲工业标准组织 所制定的 新一套 js 语法标准 也算是 js 第6套版本 ECMAscript 简称ES6
es6 是 js 的标准
js 是 ES6 的实现
es6 中 提供了 模块化开发的语法 ,主要应用于 企业级复杂的web开发
对数组 对象 字符串 都进行一些方法的扩展
提供了几个新的数据类型。
es6 可以实现一个同步的效果

二. let_ const

1. let

(1)let 声明的变量只在 let 命令所在的代码块内有效

 for(var i = 0;i<10;i++){
    console.log(i);
    var  = i
 }
    console.log(i);//10
     console.log(a);//9
i 和 a 都能取的到  说明js中 用var 在for中声明的变量 可以在外部访

   for(let i = 0;i<10;i++){
       let a = i;
 }
   console.log(i);
    console.log(a);
  在 es6 中 用 let在for中生命的变量 无法在外部访问

(2)Let 生命的变量 变量名 不能重复 而且 必须先声明后使用,let没有变量的提升 和 变量污染

var a = 0;
let a = 1;
console.log(a)  直接报错

(3)块级作用域 相当于 局部作用
// 在js中 只有函数才能创造局部作用域,但是在es中 只要是个大括号{} 他都是局部作用域(也是块级作用域

{
var  a = 0;a
let b = 1
}
console.log(a) //0
console.log(b)// 报错 找不到变量b 

1.与js中不同的是 在js 中 在全局中生命的变量 在局部环境也可以使用
2.在Es6中 全局变量只能在全局中使用,局部变量也只能在局部中使用
3.而且 全局声明的变量 跟 局部声明的变量 没有任何关系
变量名也可以一样
4.let 声明的变量 只能在当前作用域中使用

let a = 0;
{
  let a = 1;
console.log(a) //1
}
console.log(a)//0

2.const

(1). const 关键字 在es6中 声明 静态常量
(2).常量所有字母 必须完全大写
(3).常量在声明时必须赋值
(4).const 在作用域特性上 跟let完全一样
(5).var 声明的变量 是写在了 window的对象上 是 window的属性或方法
let 声明的变量 跟 window完全没有关系,

const PI = 3.1416926;
console.log(PI); 3.1416926
PI = 0;
console.log(PI);   报错 ! 常量 无法修改!
const ABC;
console.log(ABC)  常量必须在声明的时候赋值

三.解构赋值

概述

解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

解构模式

**在解构中,有下面两部分参与:
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。
**
正常赋值

let x = 0;

解构赋值
本质上就是一种模式匹配,只要等号两边的模式相同,
左边的变量就会被赋予相对应的值

let [x,y] = [0,1]
console.log(x)// 0;
console.log(y)  // 1

(1)二维数组的解构赋值

let[a,[b1,b2],c] = [0,[1,2],3];
console.log(a); //0
console.log(b1);//1
console.log(b2);//2
console.log(c);//3

(2)按位置匹配

let[a, ,b] = [1,2,3]
// 让b等于3,需要将中间用逗号(,)隔开
console.log(b)//3

(3)解构赋值 结构对象时
变量名 必须和属性名相同,但是顺序没有要求

let obj = {
  name:'张三',
age:18,
sex:'女',
say:function(){
console.log('你好,我是张三')
  }
}

Es5 写法

var name1 = obj.name;
var age1 = obj.age;

Es6写法

let{
  age,
names,
} = obj;
console.log(names,age)

(4) 解构数组

let arr= [1,2,3,4,5];
let obj1 = {
   [0]:a,
   [4]:b
}=arr
console.log(a,b)//a= 1,b = 5

(5).当对象中含有数组时

let obj1 = {
  data :[0,1,2,3,4]
}
let{
data, // 已变量 取出相对应  键值对的值 变量名必须和属性名相同
data:arr// 以属性名 取出 相对应键值对的值  并将值保存在变量arr中
data:[a,b,c] //将上一步的arr 彻底解构
} = obj1
console.log(a);//0
console.log(b);//1
console.log(c);//2

(6).当对象中含有数组 数组内又有对象

  let obj = {
  data:[{
  age:1
},{
    names:2
    }]
}

解构

let{
  data:[{age},{names}]
} = obj;
console.log(age,names)// 1 , 2 

(7).解构赋值 解构字符串时 会将字符串当做一个数组来解构

let str = 'Helloword';
let[a,b,c] = str;

let{
  [0]:d 
} = str;
console.log(a,b,c,d)// H , e, l ,H

四.函数拓展

//在es6中 用let 或 const 声明与形参重复的 变量 或 常量
其实不管在 es6 还是js 中 形参跟变量名 都尽量不要重复

形参默认参数

注意!!!

(1)形参默认值不是赋值 而是惰性传值
(2)使用函数默认参数时,不允许有同名参数。
js中默认值赋值

function fn1(x){
  var a = x || 10//js中默认值赋值
}

js中默认值赋值

function fn3(x = 10){
  var a = x//js中默认值赋值
}

给函数传参

function fn3(x){
  let x = 0;
console.log(x)
}
fn3(10)

五.箭头函数

(1)多个参数时

let fn3 = (a,b) =>{
  console.log(a,b)
}
fn3(10,11)

(2).一个参数时,(可以省略括号)

let fn4 = a =>{
  console.log(a)
  }
fn4(1)

(3).没有参数(不能省略括号)

var fn5 = () = >{
  console.log(123)
  }
fn5()

普通函数
命名函数

function fn1(a){
  console.log(a)
}

字面量形式
var fn2 = function(a){
console.log(a)
}
带返回值
正常函数

function aa(){//正常函数
  return 123
}
箭头函数

**(1)箭头函数中 如果只有一条 return 语句 则可以省略大括号

function a(){
  return function b1(a){
    return a+1 
 }
}

箭头函数写法

   let b  = () => a => a+1;
    let b1 = b()(1)
console.log(b1)

当内部函数 使用箭头函数时 不会改变外部函数 this 指向

this指向的总结
普通函数 谁调用我 我的this指向谁
箭头函数我被定义时 ,定义的环境中this 指向谁 我我this就只想谁

 let obj = {
  say:function(){
  console.log(this);//这个对象
      },
eat:() =>{
  console.log(this);//window
      }
  }
obj.say();
obj.eat();

给对象 定义方法时 不要使用箭头函数

构造函数就没有什么所谓了

function Dog(){
            this.say = function(){
                console.log(this);
            },
            this.eat = ()=>{
                console.log(this);
            }
        }
        let d1  = new Dog();
        d1.say();
        d1.eat();

六.字符串的拓展

**模板字符串 (反斜点)
在模板字符串中 如果需要写一个字符 则要在前面加上 \ **
字符串拓展 的方法

let str = 'hellow'

1.includes()查找
查找指定字符 有返回值
能找到 返回 true
找不到 返回 false

console.log(str.includes('o')); // true 
console.log(str.includes('a'))//false

(2)startsWith()
判断是否以指定字符开头,返回值是布尔值
如果是 返回 true
如果不是 返回 false

  console.log(str.startsWith('h'));//true
    console.log(str.startsWith('he'));//true
    console.log(str.startsWith('hel'));//true
    console.log(str.startsWith('helo'));//false
    console.log(str.startsWith('o'));//false
    console.log(str.startsWith('w'));//false

(3)endwith()
判断是否以指定字符结尾,返回值是布尔值
如果是 返回true
不是 返回 false

  console.log(str.startsWith('h'));//true
    console.log(str.startsWith('th'));//true
    console.log(str.startsWith('ith'));//true

(4)repeat
将原字符串 重复赋值指定次数 并将生成的字符串 返回

    console.log(str.repeat(1));
    console.log(str.repeat(2));
    console.log(str.repeat(3));

(5)5.trim();删除首位和末尾空格

       let str1 = ' a b c d e f ';
    console.log(str1.trim(1));//删除首位和末尾空格
    console.log(str1);

6.trimStart();//删除首位格
7.trimEnd()//删除末尾空格

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容