zoukankan      html  css  js  c++  java
  • es6还欠完善的地方

    const的可变性

    const用于声明常量。
    什么是常量,声明后的值不可更改。
    对于值类型,比如string,number等等。const声明确实有效。

    const str = "string";
    str = 1; // Uncaught TypeError: Assignment to constant variable.
    

    对于引用类型,比如array,object。const声明只保证了引用不可更改,但保证不了其内容。

    const arr = [];
    arr.push(1); // 不报错
    arr; // [1]
    const obj = {};
    obj.test = 1; // 不报错
    obj; // Object {test: 1}
    
    arr = 1; // Uncaught TypeError: Assignment to constant variable.
    obj = 1; // Uncaught TypeError: Assignment to constant variable.
    

    为了保证array和object的内容也不可更改。我可以使用Object.freeze方法。

    const arr = [1];
    Object.freeze(arr);
    arr.push(1); // Uncaught TypeError: Can't add property 1, object is not extensible
    arr[0] = 9; // arr[0]的值仍是1,但这条语句不会报错。
    arr[0]; // 1
    
    const obj = {};
    Object.freeze(obj);
    obj.a = 3; // obj的值仍是{},但这条语句不会报错。
    obj; // {}
    

    应该报错的地方,不去报错,有隐患。
    隐患在于排查bug困难。

    并且,Object.freeze只能锁定对象的一级值属性。

    const obj = {a: {}};
    Object.freeze(obj);
    obj.a.b = 1;
    obj; // {a: {b: 1}}
    

    这样看来原生,并没有提供一个好的const解决方案。
    直的不行,我们弯的来。
    参考Facebook的immutable-js
    以及这篇文章也可一看。

    没有return语句的函数

    JS里面的函数允许没有return语句,它会默认返回undefined。

    var a = 1;
    var fn = function(){};
    a = fn();
    a; // undefined
    

    如果你的return是写在分支中,没有被执行到,便会有隐患。

    箭头函数可读性不高

    ES6还允许使用箭头函数。情况更加糟糕。

    const isEven = n => n % 2 == 0;
    // 等同于
    const isEven = function(n){
      return (n % 2) == 0;
    };
    

    箭头函数写起来更加简洁,阅读起来则更加费脑。

  • 相关阅读:
    MathType中如何快速输入空心字母
    如何用MathType编辑出积分符号
    史上“最骚”公式编辑器,你了解多少!
    几何画板中直角符号为什么不带阴影
    mssql 版本查询
    python爬取网站数据保存使用的方法
    sql 联合查询
    sql join
    增删改查
    发送json-简单的传参查询和简单的sql查询
  • 原文地址:https://www.cnblogs.com/samwu/p/5954387.html
Copyright © 2011-2022 走看看