• 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;
    };
    

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

  • 相关阅读:
    查询多列数据时用这种方法查询
    当只需要查找一列数据的时候 用这种方法减少数据库的访问
    将从数据表中获得的枚举变量名称或者是控件名变成要使用的枚举变量
    枚举变量用法
    查询数据表行数 然后循环查找表 添加数据到ITEMS
    tbType和TypeList操作
    c#中动态创建textbox并且从数据库中获取表中数据添加到textbox中
    OpenCV
    lambda表达式
    技术术语
  • 原文地址:https://www.cnblogs.com/samwu/p/5954387.html
Copyright © 2020-2023  润新知