ECMA6 Script

ES6

JavaScript组成:

  • ECMAScript:javascript基本语法
  • BOM:浏览器对象模型(操作浏览器) 核心对象 window
  • DOM:文档对象模型(操作html) 核心对象:document

ECMAScript

  • ECMAScript5:脚本语言,不需要独立的编译器,通过浏览器来加载 运行,实现用户和页面的交互
  • ECMAScript6:是javaScript的下一代语法标准,于2015年6月发布,是javaScript正式成为企业级的开发语言
  • ECMAScript和javascript关系
    • ECMAScript是一个语法规范,javaScript是该语法规范的实现

ES6的语法

  • let 和 const
    • let:用来声明块级变量,var声明的变量会出现作用域的提升(会出现变量的污染)
    • const:声明的常量必须要初始化
  • const声明的对象:常对象
    • 可以修改对象的属性值,但是不能修改对象本身

key是键 value是值

ES6交换变量的值

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

冻结对象

  • 不能修改对象的属性
  • 使用Object.freeze(对象名)
  const obj = {
            name: '李四',
            age: 25
        }
        console.log(obj);
        Object.freeze(obj)//冻结对象
        obj.name='mab'
        console.log(obj);
  • hasOwnProperty(key)函数:判断key是否是对象的属性,如果是返回true,不是返回false
 function fn(obj) {
    Object.freeze(obj)
    for (let key in obj) {
if (obj.hasOwnProperty(key) && typeof obj[key] == 'object'){
         fn(obj[key])
        }
    }
}

ES6新特性

临时死区
  • 用let和const声明的变量,使用let 声明的变量、const声明的常量的作用域不会被提示

  • 在循环中使用var的情况:

  • 结构赋值:Rest运算符:“…”

    • 当迭代器使用:会被 顺序遍历容器中的元素

拷贝数组

let arr = [1,2,3,4]
let newarr = [...arr]

合并数组

合并数组就是将多个数组扩展后放置到新的数组中,同时也支持将数组扩展后,放置到其他数组的任意位置处

let arr = [1,2,3,4]
let newarr = [5,6,7,8]

let a3 = [...arr,...newarr,9]

将数组扩展为函数参数

支持将数组扩展为函数的参数,在函数调用的时候,直接传入数组的扩展作为参数

 function fn(x, y, z) {
            return x + y + z;
        }
        const num = [1,2,3];
        console.log(fn(...num));//6

克隆对象

        let obj1 = {
            name:'包包dR',
            age:'20'
        }
        let obj2 = {...obj1};
        console.log(obj2);

合并对象

合并时,key不能一样,如果 一样,将放不进去

        let obj1 = {
            name:'包包dR',
            age:'20'
        }
        let obj2 = {
            nam:'LCX',
            ag:'22'
        }
        let obj3 = {...obj1,...obj2};
        console.log(obj3);

支持在参数上赋值

    function fn(age = 18, type = 1) {
        
        }

解构赋值

Rest运算符:...

  • 当迭代器使用:会按顺序遍历容器中的元素
        function fun(x,y,z) {
            console.log(x,y,z);
        }
        let arr = [11,22,23];
        fun(arr)
  fun(...arr) // ... 运算符的作用是一个迭代器:一次遍历数组中的元素
  • 替代函数的内置属性arguments
     function fun(...args) {
            console.log(args);
        }
        let arr = [11,22,23];
        fun(arr)
  • 通过解构赋值可以简化变量的赋值
let arr = [11,22,33]
let [a,b,c] = arr
  • 通过...把特定的元素放在变量里
  let [a,...arr] = [11, 22, 33]
        console.log(a);
        console.log(arr);
  • 通过解构来交换变量的值
let a = 10
let b = 20; //最后一个后面必须加`;` 结尾
[a, b] = [b, a];
console.log(a, b);

对象的解构

  • 将对象的属性解构出来赋值给变量
  let obj = {
            id: 1001,
            userName: '关羽',
            sex: '男',
            score: {
                html: 98,
                css: 95,
                js: 85
            }
        }
let { id, userName, sex,score:{html,css,js}} = obj;//变量名必须和对象的属性名相同
        console.log('编号', id);
        console.log('用户名', userName);
        console.log('性别', sex);
        console.log('css成绩',css);

在解构时可以给变量重命名

    let obj = {
            id: 1001,
            userName: '关羽',
            sex: '男',
            score: {
                html: 98,
                css: 95,
                js: 85
            }
        }
        let { id, userName, sex, score: { html, css, js } } = obj;//变量名必须和对象的属性名相同
        let { id: userId } = obj;
        console.log('编号', userId);
        console.log('用户名', userName);
        console.log('性别', sex);
        console.log('css成绩', css);

模板字符串

  • 是用反引号``和$(变量名)将字符串常量和变量写在字符串里,就不需要,'+'进行字符串的拼接

Symbol类型

ES5的数据类型:number , string , boolean , bigint , null , undefined , object

ES6新增的Symbol:表示唯一的值

  • 直接创建

    let 变量名 = Symbol

  • 间接创建

    let 变量名 = Symbol

set集合

set是一个构造函数,凡是用构造函数创建对象时都要用new

是一种数据结构,里面不能存放重复的值,可以用于数组去重,字符串去重

  • 创建方式
    • 使用new运算符:let 变量 = new Set()
    • 用过数组来创建:let 变量名 = new Set([1,2,3,5,6])去除重复的元素
     let arr = [1,2,3,2,0,3,5]
        let s2 = new Set(arr)
        console.log(s2)//1,2,3,0,5
常用方法

add()

添加值,返回set结构本身

 let s1 = new Set();
        // console.log(s1);
        let arr = [1, 2, 3, 2, 0, 3, 5]
        let s2 = new Set(arr)
        console.log(s2)//1,2,3,0,5
        let tmp = s1.add('玛卡巴卡');
        console.log(typeof tmp) //object
        s1.add(123).add(456).add('abc');
        console.log(s1);//将集合转换成数组
        console.log(...tmp);
        console.log(tmp);

delete()

删除集合中的元素,

 let s1 = new Set();
        // console.log(s1);

        let arr = [1, 2, 3, 2, 0, 3, 5]
        let s2 = new Set(arr)
        console.log(s2)//1,2,3,0,5


        let tmp = s1.add('玛卡巴卡');
        console.log(typeof tmp) //object

        s1.add(123).add(456).add('abc');
        console.log(s1);//将集合转换成数组

        console.log(...tmp);
        console.log(tmp);

        let flag = s1.delete(123);
        console.log(flag);
        console.log(...s1);

has(val)

判断val在集合中是否存在,如果存在返回true,不存在返回false

clear()

清空集合中所有元素的值

values()

获取的是集合中所有的value

ksys()

获取集合中的key

强调:Set集合也是key-value格式,它的key和value是相同的

属性

size存放的是集合中元素的个数

遍历方法

for…of
for(let i of s1.keys()){
    console.log(i)
    }
forEach
 s1.forEach(function (value, key) {
    console.log(value + '---------' + key);   
})

集合运算

并集
 let setA = new Set([4, 5, 6]);
let setB = new Set([5, 6, 7])
// 1.实现setA与setB的并
// let bj = new Set([...setA,...setB]);
// console.log(bj);

/* 
  2.实现setA与setB的交集:通过过滤器来实现
   [...setA]:
*/
let arr = [...setA] // 解构集合SetA将其转换成数组

// 对arr进行过滤,使用filter函数
let temp = arr.filter(function (item) {
    //一次从arr中取出元素,传递给item,在函数体中设置筛选条件,将满足条件的
    return setB.has(item) //满足条件的item返回
    if (setB.has(item)) {
        return item
    }
})

WeakSet

只是一个对象集合,集合中只能存放对象,只支持add,has,delete

Map集合

数据的存放格式:采用 key-value(键值对)的方式进行存放,采用这种方式存放数据的有:

  • 对象:属性对应的是Key(键),属性值对应的是value(值)

    let obj = {
    name:'张三'
    age:25
        }
    
  • JSON:是常用的一种前后台数据交换的格式

  • Map

Map的定义

Map是一种数据结构(Hash结构),在ES6中是Map一种存放许多键值对的有序列表

Map的使用方法
  • 属性:size — 存放的是Map中的元素个数

  • 方法:

    • Map():构造方法,用来创建Map对象,不带参数表示创建空的Map,即Size属性为0
    • set(key,value):向Map中添加数据
    • get(key):获取键为key的value
    • has(key):判断Map中是否存在key,返回布尔
    • delete(key):删除key
    • clear():清空Map
    • keys():返回Map中的所有key
    • values():返回Map中的所有value
    • entries():获取Map中的所有成员(即所有的键值对)
    • for of循环遍历
      for (let temp of m2.entries()) {
                console.log(temp);
            }
            for (let [key, value] of m2.entries()) {
                console.log(`${key}:${value}`);
            }
    
    • for each循环
     m2.forEach(function(value,key) {
        console.log(key,value);
            } 
        );
    
  • 强调

    • Map中的Key不能重复
    • keys()返回的是Map中所有key集合 — keys()返回的集合类型是Set
    • 在Map中通过key可以得到对应的value,但是不能用过value得到Key

课堂练习2:Map数组(数组的每个单元都是一个key-value)

Map转换为数组

  • 解构整个Map:
  let m4 = new Map([
            ['one','北京'],
            ['two','上海'],
            ['three','深圳']
        ]);
let arr = [...m4];
console.log(arr);//将m4转换成数组.arr本质是三行两列的二维数组
  • 解构keys()
let a1 = [...m4.keys()]
console.log(a1);
  • 解构values()
let a2 = [...m4.values()]
console.log(a2);

函数

ES5的函数
  • 通过function关键字来定义函数
function  函数名 ([参数]{
    
    }
  • 函数表达式
let 变量 = function([参数]){
    
    }
  • 注意
    • 形参和实参的区别
    • 函数的返回值:return语句来实现

ES6中对函数的扩展

  • 函数形参的默认值
     function fun(a, b, c=45) { //形参的默认值为45,如果调用函数式没有给C传递参数值,则使用默认值
            if (typeof a === 'undefined') {
                a = 67
            }
            if (typeof b === 'undefined') {
                b = 89
            }
            console.log('a=', a);
            console.log('b=', b);
            console.log('c=', c);
        }
        let a = 10, b = 20, c = 30;
        fun(11,12) 
箭头函数

在定义函数时使用<==>符号

在定义函数时使用=>符号,在定义回调函数(高阶函数),函数表达式时使用,可以简化代码

   let fun = () => 'zxc'
当箭头函数的函数语句只有一个一条时,需要注意两点
 {}可以省略  

当箭头函数的函数语句只有一个一条时,需要注意两点

  • {}可以省略
  • 默认含有return,在没有{}时,省略了return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值