• ES6简单入门


    let

    let命令用来声明块级作用域. 以前的JavaScript只有全局作用域和函数作用域, 没有块级作用域.

    // 示例1:
    if (1) {
        var a = "hello";
        let b = "world";
    }
    console.log( a ); // hello
    console.log( b ); // b is not defined
    
    // 示例2:
    for (let i = 0; i < 10; i++) {
        // do something
    }
    
    console.log(i); // ReferenceError: i is not defined
    
    // 示例3.1:
    var a = [];
    for (var i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i);
        };
    }
    console.log( i );
    console.log( a[6]() ); // 10
    // 循环结束后i的值为10, a[6](), 相当于a[6](10), 所以输出10
    
    // 示例3.2:
    var a = [];
    for (let i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i);
        };
    }
    console.log( a[6]() ); // 6
    // 循环结束后, i不再能够被访问, 此时调用a[6](), 则相当于a[6](6), 输出6
    

    不存在变量提升

    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;
    
    // 什么都不定义而直接输出
    console.log(foo2); // 报错ReferenceError
    

    报错与输出undefined大不一样, undefined是JavaScript里的值, 而报错则程序中断运行.

    const

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

    const PI = 3.1415;
    PI // 3.1415
    
    // 为const变量重新赋值报错 
    PI = 3; // TypeError: Assignment to constant variable.
    
    // 由const变量不能在其后赋值, 所以在声明的同时必须同时赋值, 否则报错
    const foo; // SyntaxError: Missing initializer in const declaration
    

    const的变量作用域等其它特性都与let相同

    箭头函数

    ES6允许使用箭头(=>)定义函数. 一个箭头函数表达式的语法比一个函数表达式更短.

    语法

    首先箭头函数一般用来简化使用函数表达式来定义的函数, 总体理解就是箭头左边是函数的参数, 箭头
    右边是函数的返回值或者函数体.

    var func1 = (param1, param2, paramN) => expression; // 相当于
    var func2 = function (param1, param2, paramN) { return expression };
    
    // 注意下面的statements加了大括号
    var func10 = (param1, param2, paramN) => { statements }; // 相当于
    var func11 = function (param1, param2, paramN) { statements };
    
    // Parentheses are optional when there's only one parameter name:
    // 函数参数只有1个, 则参数外层的括号可省略
    var func3 = (singleParam) => { statements }; // 相当于
    var func4 = singleParam => { statements }    // 相当于
    var func5 = function (singleParam) { statements };
    
    // A function with no parameters should be written with a pair of parentheses.
    // 函数没有参数, 参数外层的括号不可省略
    var func6 = () => { statements }; // 相当于
    var func7 = function () { statements };
    
    // Parenthesize the body of function to return an object literal expression:
    // 函数的返回值是1个对象, 则需要额外加一层小括号(因为原来的大括号当包围函数体的用途)
    var func8 =  params => ({name: sheng});
    var func9 = function (params) { return {name: sheng} };
    

    强烈推荐这个网站http://babeljs.io/repl, 把自己写的箭头函数, 复制粘贴到该网站左边的框
    里, 该网站就会自动帮你解析成ES3/5版本.

    简单示例

    var sayHello = () => "hello-world";
    console.log( sayHello() );
    

    Class

    ES6标准的定义的class并不是推翻了已经存在JavaScript基于原型的继承方式, 新的class,
    写法只是让我们看起来更清晰, 更像传统的面向对象编程.class, 实际上是1个特殊的函数.

    // 传统写法
    function Point(x, y) {
        this.x = x;
        this.y = y;
    }
    
    Point.prototype.toString = function () {
      return '(' + this.x + ', ' + this.y + ')';
    };
    
    var p = new Point(1, 2);
    
    // class写法
    //定义类
    class Point {
        constructor(x, y) {
            this.x = x;
            this.y = y;
        }
    
        toString() {
            return '(' + this.x + ', ' + this.y + ')';
        }
    }
    

    模板字符串

    模板字符串是增强版的字符串, 使用反引号标识. 提供嵌入表达式, 插入变量, 保留换行等功能.

    语法

    `string text`
    
    `string text line 1
     string text line 2`
    
    `string text ${expression} string text` // ${} 是固定用法
    

    用法

    // 在字符串中嵌入变量
    var name = "Bob", time = "today";
    `Hello ${name}, how are you ${time}?`
    
    // 多行字符串
    console.log(`
        string text line 1
        string text line 2
        string text line 3
    `);
    
    console.log("
    string text line 1
    string text line 2
    string text line 3
    ");
    
    // 
    

    相关链接

    Babel REPL: http://babeljs.io/repl, 该工具非常强大, 在线把ES6语法解析成其兼容版本.
    本文大部分内容都参考自此书: http://es6.ruanyifeng.com/
    箭头函数 - MDN

  • 相关阅读:
    leetcode 75 颜色分类 A
    leetcode525连续数组 A
    WCF无身份验证配置
    三读设计模式
    EntityFrameWork+Oracle学习笔记搭配环境(一)
    EntityFrameWork+Oracle学习笔记DBfirst(二)
    用Python解答百度测试开发算法面试题
    Python实现采集wordpress整站数据的爬虫
    吾八哥学Python(六):运算符与表达式
    吾八哥学Python(四):了解Python基础语法(下)
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7472752.html
Copyright © 2020-2023  润新知