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

理解它的語義,並用正確的關鍵詞做正確的事。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM