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

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

  • 相关阅读:
    (转)iOS分类和扩展(Categories和Extensions)
    (转)在Android的webview中定制js的alert,confirm和prompt对话框的方法
    (转)20 个大大节省你时间的 HTML5 开发工具
    (转)UIWebView与JavaScript的那些事儿
    ios调打电话代码
    iOS打电话、发邮件、发短信、打开浏览器
    (转)常见证书格式和转换
    (转)实战p12文件转pem文件
    (转)iOS如何取得APP的版本信息跟服务器对比进行升级提示?
    添加首部元素
  • 原文地址:https://www.cnblogs.com/samwu/p/5954387.html
Copyright © 2011-2022 走看看