prefer-const

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

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

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

今天在看react官方的Tutorial時,發現demo裏大多數地方用的都是const而不是let,代碼裏不可能處處定義常量吧。。。讓我困惑不已!!!!typescript

雖然demo裏被const標記的變量都是引用類型的,在ES6語法中並不會報錯,可是從字面意思上看const 是表明常量——不變的意思,官方這樣寫不怕讀者感到奇異嗎?c#

因而在網上搜了一些資料,才發現:eslint

在c#中,const定義的常量是不能作任何修改的。htm

而在ES6中,原則應該是:能用 const 就應該用 const。好比開啓 eslint 的 prefer-const 的 rule。ip

有一些人,由於以爲 const 表示常量,而實際上並非常量,因此認爲不該該用。這是一種因果倒置io

當然在一些語言裏,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

理解它的語義,並用正確的關鍵詞作正確的事。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息