Vue基础-ES6常用语法补充

01.let和const。02.解构赋值。03.数据集合-set。04.数据集合map。05.Symbol。

01.let和const。


1.let注意事项。
  • 1.作用域只局限于当前代码块
  • 2.使用let申明的变量作用域不会被提升
  • 3.在相同的作用域下不能申明相同的变量
  • 4.for循环体现let的父子作用域
2.const使用注意。
  • 1-只在当前的代码块中有效
  • 2-作用域不会被提升
  • 3-不能重复申明
  • 4-申明的常量必须赋值
// let 和 const 声明 变量和常量  var
// 01-作用域只局限于当前代码块
   {
        var str = '张三';
        console.log(str);//张三
        let str1 = '李四';
        console.log(str1);//李四
    }
    console.log('++++++' + str);//++++++张三
    console.log('-----' + str1);//错误
   // 02-使用let申明的变量作用域不会被提升
    {
        console.log(str1); // undefined
        var str1 = '张三';

        var str1;
        console.log(str1); // undefined
        str1 = '张三';
    }

    {
        console.log(str);//错误
        let str = '李四';
    }
   // 03-在相同的作用域下不能申明相同的变量
    {
        var str1 = '张三';
        var str1 = '李四';
        console.log(str1);

        let str2 = '王五';
        let str2 = '赵六';
        console.log(str2);
    }
   // 04-for循环体现let的父子作用域
   var btns = document.querySelectorAll('button');
    for(var i=0; i

// 01-只在当前的代码块中有效 02-作用域不会被提升03-不能重复申明
    {
        const a = 'zhangsan';
        //const a = 'lisi';
        console.log(a);
    }
     console.log(a);

    // 04-申明的常量必须赋值
    {
        const name;
        name = 'zhangsan';
        console.log(name);
    }
    {
        const name = 'zhangsan';
        name = 'lisi';
        console.log(name);
    }

    const obj = {name: '张三'};
    console.log(obj);
    obj.name = '李四';
    console.log(obj);

02.解构赋值。


ES6允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)
  • 1.基本用法
  • 2.对象的解构赋值
  • 3.数组的解构赋值
  • 4.基本类型的解构赋值
//1. 基本用法
     // let name = '张三', age = 18, sex = '男';
     let [name, age, sex] =['李四', 20, '女'];
     name = 'hhh';
     console.log(name);
     console.log(age);
     console.log(sex);
// 2-对象的解构赋值
        let {name, age, sex} = {name: '张三', age: 55, sex: '男'};
        console.log(name);
        console.log(age);
        console.log(sex);
   
     let {name, age, friends, pet} = {name: '张三', age: 55, friends: ['lulu', '王五'], pet: {name: '土豆', age:5}};
     console.log(name);
     console.log(age);
     console.log(friends);
     console.log(pet);

        let {name:str} = {name:'张三'};
        console.log(name);
        console.log(str);
// 3-数组的解构赋值
     //let [name, age, sex] =['李四', 20, '女'];
     let [arr1, [arr2, arr3, [arr4, arr5]]] = [1, [2, 3, [4, 5]]];
     console.log(arr1, arr2, arr3, arr4, arr5);

     let [arr1] = [];
     console.log(arr1);

     let [a, , ,c] = [1, 2, 3];
     console.log(a);
     console.log(c);
//4-基本类型的解构赋值
    let [a, b, c, d, e] = '我是中国人';
    console.log(a);
    console.log(b);
    console.log(c);
    console.log(d);
    console.log(e);

03.数据集合-set


  • 一个属性size
  • 四个方法add,delete,has,clear
  • keys values(键值对一样)
 // 1. 创建一个集合
    let set = new Set(['张三', '李四', '王五', '张三', '李四']);
    console.log(set);//Set(3) {"张三", "李四", "王五"}

 // 02-一个属性
     console.log(set.size);//3

// 03-四个方法
    // add
     console.log(set.add('刘德华').add('旋之华'));//Set(5) {"张三", "李四", "王五", "刘德华", "旋之华"}
     console.log(set);//Set(5) {"张三", "李四", "王五", "刘德华", "旋之华"}

// delete
    console.log(set.delete('张三'));//true
    console.log(set.delete('李四'));//true
    console.log(set);//Set(3) {"王五", "刘德华", "旋之华"}


 // has
    console.log(set.has('王五'));//true
    console.log(set.has('张三1'));//false

// clear
    console.log(set.clear()); // undefined
    console.log(set);//Set(0) {}

// keys values
    console.log(set.keys());//SetIterator {}
    console.log(set.values());//SetIterator {}

04.数据集合map


1.特点
  • 1-类似于对象,本质上是键值对的集合。
  • 2-“键”不局限于字符串,各种类型的值(包括对象)都可以当做键。
  • 3-对象“字符串-值”,Map“值-值”是一种更加完善的Hash结构实现。
2.属性和方法
  • 常用属性:size
  • 方法:set和get,delete,has,clear,keys() values() entries()
   {
        let obj1 = {a: 1}, obj2 = {b: 2}, obj = {};
        obj.name = '张三';
        obj[obj1] = '天空';
        obj[obj2] = '大海';
        console.log(obj);

        console.log(obj.toString());
        console.log(obj1.toString());
        console.log(obj2.toString());
        console.log(obj1.toString() === obj2.toString());
    }

    // 1. 创建一个Map
   let obj1 = {a: 1}, obj2 = {b: 2};
    const  map = new Map([
        ['name', '张三'],
        ['age', 18],
        ['sex', '男'],
        [obj1, '今天天气很好'],
        [obj2, '适合敲代码'],
        [[1,2], 'hhh']
    ]);
   console.log(map);
   console.log(map.size);

   // set和get
    map.set('friends', ['赵六', '力气']).set(['dog'], '小花');
   console.log(map);
   console.log(map.get('name'));
   console.log(map.get(obj1));

   // delete
     map.delete(obj1);
   console.log(map.delete('xxxx'));
   console.log(map);

   // has
   console.log(map.has(obj1));
   console.log(map.has(obj2));

   // clear
   map.clear();
   console.log(map);

   // keys() values() entries()
   console.log(map.keys());
   console.log(map.values());
   console.log(map.entries());

    // 遍历
    map.forEach(function (value, index) {
        console.log(index + ':' + value);
    })

    // 注意事项
    map.set({}, '呵呵呵呵呵');
    map.set({}, '哈哈哈哈');
   console.log(map);
   console.log({} === {});

05.Symbol


对象的属性名可以有两种类型
  • 字符串
  • Symbol类型---独一无二,不会与其他属性名产生冲突。
场景
  • ES5的对象属性名都是字符串,容易造成属性名冲突。
  • ES6引入新的原始数据类型Symbol,表示独一无二的值。
// 1. 定义
    let str1 = Symbol();
    let str2 = Symbol();
    console.log(str1 === str2);
    console.log(typeof str1);
    console.log(typeof str2);

    // 2.描述
    let str3 = Symbol('name');
    let str4 = Symbol('name');
    console.log(str3);
    console.log(str4);
    console.log(str3 === str4);

   // 3. 对象的属性名
    const obj = {};
    //obj.name = '张三';
    //obj.name = '李四';
    obj[Symbol('name')] = '张三';
    obj[Symbol('name')] = '李四';
    console.log(obj);

06.class

新增加的一个语法糖,作用在于让对象原型的写法更加清晰\更像面向对象的编程方式。
构造函数的另一种写法。

绚丽小球练习 super canvas
 // 1. 构造函数
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        constructor: Person,
        print(){
            console.log('我叫' + this.name + ',今年' + this.age + '岁');
        }
    };

    // 2. 通过class面向对象
    class Person{
        constructor(name, age){
            this.name = name;
            this.age = age;
        }
        print(){
            console.log('我叫' + this.name + ',今年' + this.age + '岁');
        }
    }
    let person = new Person('张三', 19);
    console.log(person);
    person.print();

07.内置对象扩展

模板字符串$ 反引号``
数组的扩展 Array.from Array.of
延展操作符 ...用于数据的传递

08.函数扩展

  • 1. 形参设置默认值
/*function sum(num1, num2) {
        num1 = num1 || 10;
        num2 = num2 || 10;
        console.log(num1 + num2);
    }*/
    function sum(num1 = 20, num2 = 10) {
        console.log(num1 + num2);
    }
     sum(10, 30);
     sum();
  • 2. 参数形式 延展操作符

… 操作符(也被叫做延展操作符 - spread operator)已经被 ES6 数组 支持。它允许传递数组或者类数组直接做为函数的参数而不用通过apply。
  延展操作符一般用于属性的批量赋值上。

/*function sum() {
        let result = 0;
        for(let value of arguments){
            result += value;
        }
        return result;
    }*/
    function sum(name, sex, ...nums) {
        let result = 0;
        console.log(name);
        console.log(sex);
        for(let value of nums){
            result += value;
        }
        return result;
    }
    console.log(sum(10, 20, 30, 50));
    console.log(sum('张胜男', '男', 10, 20, 30, 50));
  • 3. 箭头函数
    // () => {}
    //function test() { }
    let sum = (num1, num2)=>{ return num1 + num2;};
     console.log(sum(100, 300));
    let nameArr = ['张三', '李四', '王五'];
    nameArr.forEach((value, index)=>{
        console.log(index + ':' + value);
    });
修正this的指向
    function demo() {
        setTimeout(function () {
            console.log(this);
        }, 500);
        setTimeout(()=>{
            console.log(this);
        }, 1000);
    }
    let obj = {};
    demo.call(obj);

你可能感兴趣的:(Vue基础-ES6常用语法补充)