zoukankan      html  css  js  c++  java
  • ES6常用语法

    ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

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

    const 声明一个只读的常量,一旦声明,常量的值就不能改变。

    let 命令

    1.不存在变量提升

    let 不存在变量提升,var 会变量提升:

    console.log(a); //ReferenceError: a is not defined

    let a = 1;

    console.log(b); //undefined

    var b = 2;

    2.不能重复声明

    同一作用域下不能重复定义同一名称;

    let 只能声明一次 var 可以声明多次:

    let a = 1;

    let a = 2;

    var b = 3;

    var b = 4;

    // Identifier 'a' has already been declared

    // 4

    let在for 循环计数器使用:

    for (var i = 0; i < 10; i++) { 

      setTimeout(function(){ 

        console.log(i);

      }) 

    // 输出十个 10 

    for (let j = 0; j < 10; j++) { 

      setTimeout(function(){ 

        console.log(j);

      }) 

    // 输出 0123456789

    3. 有严格的作用域

    let 是在代码块内有效,var是函数作用域在全局范围内有效:

    {

    let a = 0;

    var b = 1;

    }

    a // ReferenceError: a is not defined

    b // 1

     

    const 命令

    const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

    基本类型,不能修改;

    const a = 100;

    a = 1000;//erroe

    对于引用类型,指定内存地址,可以增加属性值

    const obj = {};

    obj.id = 1;

    console.log(obj);//{id:1}

    const arr = [];

    arr.push(1);

    console.log(arr)//arr[0] = 1;

    ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量之前使用它会报错。

    箭头函数

    1. 简化函数的定义

             //函数表达式--先定义后调用;函数声明-提前解析可以提前调用

    var f1 = function(v){

    return v;

    };

    Let f1 = v => v;//变量名 = 参数 =>函数体

          2.没有参数

    var f2 = function(){

    return 1234;

    };

    Let f2 = () =>1234;

           3.多个参数

    var f3 = function(v1,v2){

      return v1+v2;

    };

    Let f3 = (v1,v2) =>v1+v2;

     数据结构SetMap

    Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

    Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:

    Const s  = new Set();//类似于数组,成员唯一;

    S.add(1).add(2).add(3)//链式

    Var arr = [1,2,4,1,1];

    Const  s1  = new Set(arr);//{1,2,4}直接去重

     

    // Array 转 Set 

    var mySet = new Set(["value1", "value2", "value3"]);

    // 用...操作符,将 Set 转 Array 

    var myArray = [...mySet];

    String // String 转 Set 

    var mySet = new Set('hello');  // Set(4) {"h", "e", "l", "o"} 

    // 注:Set 中 toString 方法是不能将 Set 转换成 String

    Set 对象作用

    数组去重

    var mySet = new Set([1, 2, 3, 4, 4]);

    [...mySet]; // [1, 2, 3, 4]

    并集

    var a = new Set([1, 2, 3]);

    var b = new Set([4, 3, 2]);

    var union = new Set([...a, ...b]); // {1, 2, 3, 4}

    交集

    var a = new Set([1, 2, 3]);

    var b = new Set([4, 3, 2]);

    var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}

    差集

    var a = new Set([1, 2, 3]);

    var b = new Set([4, 3, 2]);

    var difference = new Set([...a].filter(x => !b.has(x))); // {1}

     

    Map 对象

    Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

    Maps 和 Objects 的区别

    一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。

    const m = new Map();

    m.set(‘name’,’amy’).set(‘age’,18);

    for...of

    var myMap = new Map();

    myMap.set(0, "zero");

    myMap.set(1, "one");

    // 将会显示两个 log。 一个是 "0 = zero" 另一个是 "1 = one" 

    for (var [key, value] of myMap) {  

    console.log(key + " = " + value);

    for (var [key, value] of myMap.entries()) { 

    console.log(key + " = " + value);

    /* 这个 entries 方法返回一个新的 Iterator 对象,它按插入顺序包含了 Map 对象中每个元素的 [key, value] 数组。 */

     // 将会显示两个log。 一个是 "0" 另一个是 "1" 

    for (var key of myMap.keys()) {  

    console.log(key); } 

    /* 这个 keys 方法返回一个新的 Iterator 对象, 它按插入顺序包含了 Map 对象中每个元素的键。 */ 

    // 将会显示两个log。 一个是 "zero" 另一个是 "one" 

    for (var value of myMap.values()) {  

    console.log(value);} 

    /* 这个 values 方法返回一个新的 Iterator 对象,它按插入顺序包含了 Map 对象中每个元素的值。 */

    forEach()

    var myMap = new Map();

    myMap.set(0, "zero");

    myMap.set(1, "one");

    // 将会显示两个 logs。 一个是 "0 = zero" 另一个是 "1 = one" 

    myMap.forEach(function(value, key) { 

    console.log(key + " = " + value);

    }, myMap)

    Map 对象的操作

    Map 与 Array的转换

    var kvArray = [["key1", "value1"], ["key2", "value2"]];
     
     
    // Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象
    var myMap = new Map(kvArray);
     
     
    // 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
    var outArray = Array.from(myMap);

    Map 的克隆

    var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);
    var myMap2 = new Map(myMap1);
    console.log(original === clone); // 打印 false。 Map 对象构造函数生成实例,迭代出新的对象。

    Map 的合并

    var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
    var second = new Map([[1, 'uno'], [2, 'dos']]);
    // 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, three
    var merged = new Map([...first, ...second]);

      

    数组中循环遍历方法有一个map()和上述Map新数据结构不相同;

    和forEach()区别

    forEach是没有返回值

  • 相关阅读:
    Linux内核驱动--硬件访问I/O【原创】
    Linux内核驱动--mmap设备方法【原创】
    Linux系统调用的运行过程【转】
    蓝牙Bluetooth技术手册规范下载【转】
    FarBox--另类有趣的网站服务【转】
    蓝牙HID协议笔记【转】
    linux 串口0x03,0x13的问题【转】
    CC254x/CC2540/CC2541库函数速查(转)
    BLE获取iphone mac地址的方法--【原创】
    用secureCRT操作ubuntu终端
  • 原文地址:https://www.cnblogs.com/Lolita-Q/p/12405833.html
Copyright © 2011-2022 走看看