zoukankan      html  css  js  c++  java
  • prefer-const

    https://eslint.org/docs/rules/prefer-const

    https://www.zhihu.com/question/60625915

    https://reactjs.org/tutorial/tutorial.html#storing-a-history

    今天在看react官方的Tutorial时,发现demo里大多数地方用的都是const而不是let,代码里不可能到处定义常量吧。。。让我困惑不已!!!!

    虽然demo里被const标记的变量都是引用类型的,在ES6语法中并不会报错,但是从字面意思上看const 是代表常量——不变的意思,官方这样写不怕读者感到奇异吗?

    于是在网上搜了一些资料,才发现:

    在c#中,const定义的常量是不能做任何修改的。

    而在ES6中,原则应该是:能用 const 就应该用 const。比如开启 eslint 的 prefer-const 的 rule。

    有一些人,因为觉得 const 表示常量,而实际上并不是常量,所以认为不应该用。这是一种因果倒置

    固然在一些语言里,const 表示的是编译期常量,但是也有不少语言里 const 表示的就是不可变,和 js 里的 const 意义是一致的。比如 C++。

    我虽然确实认为 js 用 const 关键字表达这个语义(以及用 let 表示可变)不是最佳选择,但是毕竟这只是一个语法上的小节,对程序员来说,并没有什么难以掌握的。

    如果说,使用了 const 产生误解,说明(误解它的程序员)没有正确理解 const 的语义。正确的对策是教育,而不是迁就

    至于说还想表达 immutable array / object,目前在原生 js 里没有很好的办法(虽然可以用 Object.freeze/seal 之类的),确实如此。但是缺乏某一种特性难以构成不使用另一种特性的理由。况且如果真的认为这意义重大,可以用 typescript(readonly 类型)。

     

    ES6中正确的逻辑应该是:
    你认为它不应该被重新定义,使用const;
    你需要它完全不可改变,用Object.freeze或者typescript的readonly;

    而不是:
    我希望它不可变,然而用const之后它还是可变,所以不用const

    理解它的语义,并用正确的关键词做正确的事。



  • 相关阅读:
    mybatis
    mybatis
    hadoop完全分布式搭建
    用构造器确保初始化
    HashMap的内部结构与hash冲突
    方法重载 与 方法覆盖
    Django后台管理admin或者adminx中使用富文本编辑器
    Celery在Django中的使用介绍
    django.db.utils.InternalError: (1060, "Duplicate column name 'user_id'")迁移报错解决方法
    Django2.0版本以上与pymsql 不匹配问题以及解决方法
  • 原文地址:https://www.cnblogs.com/purple1/p/9069044.html
Copyright © 2011-2022 走看看