简介

作者: lesliefang | 来源:发表于2017-02-24 17:14 被阅读5次

    console 中输入多行代码, shift + enter

    only values has type in JS 只有值有类型,变量是没有类型的

    typeof null === 'object' 历史遗留 bug

    JS 数据类型

    string
    number
    boolean
    null and undefined
    object
    symbol (new to ES6)

    Array 和 Function 其实也是 object,它们是 object 的子类型

    转型

    == 允许自动转型的情况下进行比较 checks for value equality with coercion allowed
    === 不允许自动转型的情况下进行比较 checks for value equality without allowing coercion

    var a = 42;
    var b = "foo";
    a < b;      // false
    a > b;      // false
    a == b;     // false
    

    如果两边有一个不是 string 或两边都不是 string, 两个值都会强转为 number 后再比较
    b 转为 number 后是 NaN

    Hosting 变量和函数提升
    var a = 2;
    
    foo();                  // works because `foo()`
                            // declaration is "hoisted"
    function foo() {
        a = 3;
    
        console.log( a );   // 3
    
        var a;              // declaration is "hoisted"
                            // to the top of `foo()`
    }
    console.log( a );   // 2
    

    Wherever a var appears inside a scope, that declaration is taken to belong to the entire scope and accessible everywhere throughout.

    Strict Mode 应该始终开启
    function foo() {
        "use strict";   // turn on strict mode
        a = 1;          // `var` missing, ReferenceError
    }
    
    foo();
    
    在低版本的浏览器中使用高版本的特性2种方式
    1. Polyfilling (垫片)

    将高版本的特性在低版本中再实现一遍,如 ES6 中新添加了 Number.isNaN() 方法, 我们可以写一个像下面的垫片

    if (!Number.isNaN) {
        Number.isNaN = function isNaN(x) {
            return x !== x;
        };
    }
    

    这样在所有浏览器中都可以使用 Number.isNaN 方法了。 一部分特性是可以通过 Polyfilling 实现的。

    2. Transpiling

    ES6、ES7 中新的语法无法通过 Polyfilling 部署到低版本中,这时可以通过第三方工具将 ES7、ES6 编译成 ES5 后再发布。
    一般通过 Babel 或 Traceur 编译
    Babel (https://babeljs.io) (formerly 6to5): Transpiles ES6+ into ES5
    Traceur (https://github.com/google/traceur-compiler): Transpiles ES6, ES7, and beyond into ES5

    对于 web 前端用 ES6、ES7 开发,打包时用 babel 编译回 ES5 是目前通用的做法。

    新版的 Node.js 对 ES6 的支持达到了 99%, 所以 Node 是可以直接用 ES6 开发的。

    相关文章

      网友评论

          本文标题:简介

          本文链接:https://www.haomeiwen.com/subject/vbmwwttx.html