ES6 ------ 基础(一)

简介: ES6 ------ 基础(一)

ES6 ------ 基础(一)

变量的解构赋值

ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。

  1. 数组的解构
    const F4 = ['小沈阳','刘能','赵四','宋小宝']
        let [xiao, liu, zhao, song] = F4
        console.log(xiao) //小沈阳
        console.log(liu)  //刘能
        console.log(zhao) //赵四
        console.log(song) //宋小宝
  1. 对象的解构
    const zhao = {
            name:'赵本山',
            age:'不详',
            xiaopin: function() {
                console.log('我可以演小品');
            }
        }
        let {name, age, xiaopin} = zhao
        console.log(name) //赵本山
        console.log(age)  //不详
        console.log(xiaopin) // f(){console.log('我可以演小品')}
        xiaopin() //我可以演小品

模板字符串

ES6 引入新的声明字符串的方式 ``

  1. 声明
    let str1 = `我也是一个字符串嗷!`
      console.log(str1, typeof str1); // 我也是一个字符串嗷! string
  1. 内容中可以直接出现换行符(' ' 和 " " 不可以)
  let str2 = `<ul>
            <li>沈腾</li>
            <li>玛丽</li>
            <li>魏翔</li>
            <li>艾伦</li>
            </ul>`
    // 合法
  1. 可以进行变量拼接 格式:${}
    let lovest = '<活着>'
        let out = `${lovest}是最好看的书`
        console.log(out)  //<活着>是最好看的书

简化对象写法

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。

代码运行结果:

0b40c7013b6847429f95c043eac1ef3e.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>简化对象的写法</title>
</head>
<body>
    <script>
        // 这样书写更加简洁
        let name = '尚硅谷'
        let change = function() {
            console.log('我们可以改变你!');
        }
        const school = {
            name,
            change,
            improve(){
                console.log('我们可以提高你的技能');
            }
        }
        console.log(school)
    </script>
</body>
</html>

箭头函数 (=>)

ES6 允许使用 箭头 (=>) 定义函数

声明一个函数

    //ES6之前
    let fn = function(){
      }
      //ES6 箭头函数
      let fn = (a,b) => {
        return a + b
      }
      //调用函数
      let result = fn(1, 2)
      console.log('结果:' + result); // 结果:3
  1. this 是静态的,this 始终指向函数声明时所在作用域下的 this 的值。
    function getName() {
            console.log(this.name)
        }
        let getName2 = () =>{
            console.log(this.name);
        }
        // 设置 window 对象的 name 属性
        window.name = 'ES6'
        const school = {
            name: 'ECAMScript6'
        }
        //1. 直接调用
        getName() // ES6
        getName2() // ES6
        //2.call()方法调用(调用一个对象的一个方法,以另一个对象替换当前对象)
        getName.call(school) // ECAMScript6
        getName2.call(school) // ES6

call() 方法:call方法可以用来代替一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始化改为新的对象,也就是括号里面的原本的对象改为call()前面的对象、即用thisobj代替call前面的东西,最终用thisobj这个对象去执行call前面的方法。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。


不能作为构造实例化对象

    let Person = (name,age) => {
            this.name = name
            this.age = age
        }
        let me = new Person('xiao',30)
        console.log(me) //报错:Uncaught TypeError: Person is not a constructor
  1. 不能使用 arguments 变量
    let fn = () => {
            console.log(arguments);
        }
        fn(1,2,3) //报错:Uncaught ReferenceError: arguments is not defined
  1. 箭头函数的简写

(1)省略小括号(当形参有且只有一个时)

    let add = n => {    
            return n + n
        }
        console.log(add(9)) //输出 18
        /*let add = (n) => {...}*/

(2)省略花括号(当代码只有一条语句的时候)

注意:此时 return 必须省略,而且语句的执行结果就是函数的返回值
    let pow = n => n * n
        console.log(pow(9)); //输出 81

箭头函数实践

需求一:点击 div ,1s 后颜色变成粉色

  1. 第一种方法:不使用箭头函数
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>箭头函数实践</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: #58a;
        }
    </style>
</head>
<body>
    <div id="ad"></div>
    <script>
        // 获取元素
        let ad = document.getElementById('ad')
        // 绑定事件
        ad.addEventListener('click',function() {
            // 保存 this 的值
            let _this = this
            // 定时器
            setTimeout(function(){
                // 修改背景颜色 用this
                _this.style.background = 'pink'
            },1000)
        })
    </script>
</body>
</html>

注意:如果 不保存 this 的值 ,直接设置 this.style.background = 'pink' 会报错 (Uncaught TypeError: Cannot set properties of undefined (setting 'background'))。因为 this 指向的是 window,没有 style 属性。


第二种方法:使用箭头函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>箭头函数实践</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: #58a;
        }
    </style>
</head>
<body>
    <div id="ad"></div>
    <script>
        // 获取元素
        let ad = document.getElementById('ad')
        // 绑定事件
        ad.addEventListener('click',function(){
             setTimeout(() => {
                 this.style.background = 'pink'
             },1000)
         })
    </script>
</body>
</html>

注意:箭头函数 this 是静态的,始终指向函数声明时所在作用域下的 this 的值。此时的 this 指向的是事件源 ad。

需求二:从数组中返回偶数的元素

  1. 第一种方法:不使用箭头函数
  const arr = [1,6,9,10,100,25]
  const result = arr.filter(function(item){
    if(item % 2 === 0){
      return true
    }else{
      return flase
    }
  })
  console.log(result) //输出:(3) [6, 10, 100]
  1. 第二种方法:使用箭头函数
  const arr = [1,6,9,10,100,25]
  const result = arr.filter(item => item % 2 === 0)
  console.log(result) //输出:(3) [6, 10, 100]

总结:

  1. 箭头函数适用于与 this 无关的回调,定时器,数组的方法的回调。
  2. 箭头函数不适用与 this 有关的回调,事件回调,对象的方法。

函数参数默认值

ES6 允许给函数参数赋值初始值

  1. 形参初始值(具有默认值的参数,一般位置要靠后)
  function add(a,b,c){
    return a + b + c
  }
  let result = add(1,2,3)
  console.log(result) //输出 6
  function add(a,b,c){
    return a + b + c
  }
  let result = add(1,2)
  console.log(result) //输出 NaN (因为3+c为NaN)


  function add(a,b,c=10){
    return a + b + c
  }
  let result = add(1,2)
  console.log(result) //输出 13
  1. 与解构赋值结合
  function connect({host='127.0.0.1', username, password, port}){
        console.log(host); // baidu.com
        console.log(username); //root
        console.log(password); //root
        console.log(port); //3306
    }
    connect({
        host:'baidu.com',
        username:'root',
        password:'root',
        port:'3306'
    })

注意:当 connect 里面没有 host 时,会使用 127.0.0.1

rest 参数

ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments

  1. ES5 获取实参的方式
  function date(){
        console.log(arguments);
    }
    date('张三','李四','王五')

输出结果:

fc2abf31d53c44a8bd5e2ebd29bcdc1c.png

  1. rest 参数(…args)
  function date(...args){
    console.log(agrs)
  }
  date('张三','李四','王五')

68c008dc829c4b0aac3e365326455648.png

注意:输出的结果是一个数组,可以更好的处理参数(可以使用 filter、some、every、map 等)

  1. rest 参数必须放到参数的最后
  function fn(a,b,...args){
    console.log(a) //1
    console.log(b) //2
    console.log(args) //(4) [3, 4, 5, 6]
  }
  fn(1,2,3,4,5,6)

spread 扩展运算符

... 扩展运算符能将 数组 转换为逗号分隔的 参数序列。

  //声明一个数组 ...
    const f3 = ['张三','李四','王五']
    // 声明一个函数
    function fn() {
        console.log(arguments)
    }
    fn(...f3)  //相当于 fn('张三','李四','王五')

20ba520d743343668ffd695bcdf27dff.png

注意:

  1. rest 参数 ... 放在了函数声明的形参位置。
  2. 扩展运算符,... 放在了函数调用的实参里面等其他使用方式。

扩展运算符应用

  1. 数组的合并

(不使用扩展运算符)

  const kuaizi = ['王太利','肖央'] 
    const fenghuang = ['曾毅','玲花']
    const union = kuaizi.concat(fenghuang)
    console.log(union);

(使用扩展运算符)

  const kuaizi = ['王太利','肖央'] 
    const fenghuang = ['曾毅','玲花']
    const union = [...kuaizi, ...fenghuang]
    console.log(union);

3d1af8d6896c4cd882f403b0da191169.png

  1. 数组的克隆(浅拷贝)
  const sanzhihua = ['E','G','M']
    const sanyecao = [...sanzhihua]
    console.log(sanyecao);

ed4cd27c6f4c4f92a13c1197a8050891.png

  1. 将伪数组转为真正的数组
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
    <script>
        const divs = document.querySelectorAll('div')
        const divArr = [...divs]
        console.log(divArr);
    </script>
</body>
</html>

284419b5142b4a6e80fadf7270c09346.png

不积跬步无以至千里 不积小流无以成江海

相关文章
|
3月前
|
JavaScript 网络架构
ES6-----6种变量
ES6-----6种变量
44 7
|
3月前
|
API
ES6基础----Reflect的使用
ES6基础----Reflect的使用
|
前端开发
ES11 ------ 新增属性
ES11 ------ 新增属性
114 0
ES11 ------ 新增属性
|
前端开发 JavaScript 数据库
|
JavaScript
ES6----ES6模块化
ES6----ES6模块化
|
JavaScript 前端开发
ES6 ------ 基础(五)
ES6 ------ 基础(五)
|
前端开发 JavaScript
ES6 ------ let实践案例
ES6 ------ let实践案例
|
JavaScript
ES6 ------ 基础(六)—— 模块化
ES6 ------ 基础(六)—— 模块化
152 0

热门文章

最新文章