Pertanyaan Apakah ada konstanta di JavaScript?


Apakah ada cara untuk menggunakan konstanta dalam JavaScript?

Jika tidak, apa praktik umum untuk menentukan variabel yang digunakan sebagai konstanta?


1061
2017-09-24 22:45


asal


Jawaban:


Sejak ES2015, JavaScript memiliki gagasan tentang const:

const MY_CONSTANT = "some-value";

Ini akan berfungsi hampir semua browser kecuali IE 8, 9, dan 10. Beberapa mungkin juga membutuhkan mode ketat diaktifkan.

Kamu dapat memakai var dengan konvensi seperti ALL_CAPS untuk menunjukkan bahwa nilai-nilai tertentu tidak boleh dimodifikasi jika Anda perlu mendukung browser yang lebih lama atau bekerja dengan kode warisan:

var MY_CONSTANT = "some-value";

965
2017-09-24 22:46



Apakah Anda mencoba melindungi variabel terhadap modifikasi? Jika demikian, maka Anda dapat menggunakan pola modul:

var CONFIG = (function() {
     var private = {
         'MY_CONST': '1',
         'ANOTHER_CONST': '2'
     };

     return {
        get: function(name) { return private[name]; }
    };
})();

alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.private.MY_CONST = '2';                 // error
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

Dengan menggunakan pendekatan ini, nilai-nilai tidak dapat dimodifikasi. Tapi, Anda harus menggunakan metode get () di CONFIG :(.

Jika Anda tidak perlu benar-benar melindungi nilai variabel, maka lakukan saja seperti yang disarankan dan gunakan konvensi SEMUA CAPS.


304
2017-09-25 03:14



Itu const kata kunci dalam draft ECMAScript 6 tetapi sejauh ini hanya menikmati dukungan browser yang sangat sedikit: http://kangax.github.io/compat-table/es6/. Sintaksnya adalah:

const CONSTANT_NAME = 0;

118
2018-03-26 20:29



IE tidak mendukung konstanta, semacam, misalnya:

<script language="VBScript">
 Const IE_CONST = True
</script>
<script type="text/javascript">
 if (typeof TEST_CONST == 'undefined') {
    const IE_CONST = false;
 }
 alert(IE_CONST);
</script>

63
2017-10-26 19:22



"use strict";

var constants = Object.freeze({
    "π": 3.141592653589793 ,
    "e": 2.718281828459045 ,
    "i": Math.sqrt(-1)
});

constants.π;        // -> 3.141592653589793
constants.π = 3;    // -> TypeError: Cannot assign to read only property 'π' …
constants.π;        // -> 3.141592653589793

delete constants.π; // -> TypeError: Unable to delete property.
constants.π;        // -> 3.141592653589793

Lihat Object.freeze. Kamu bisa menggunakan const jika Anda ingin membuatnya constants referensi read-only juga.


63
2018-05-04 23:58



ECMAScript 5 memang memperkenalkan Object.defineProperty:

Object.defineProperty (window,'CONSTANT',{ value : 5, writable: false });

Nya didukung di setiap browser modern (serta IE ≥ 9).

Lihat juga: Object.defineProperty di ES5?


56
2018-01-09 00:41



Tidak, tidak secara umum. Firefox mengimplementasikan const tapi saya tahu IE tidak.


@John menunjuk ke praktik penamaan umum untuk consts yang telah digunakan selama bertahun-tahun dalam bahasa lain, saya tidak melihat alasan mengapa Anda tidak bisa menggunakannya. Tentu saja itu tidak berarti seseorang tidak akan menulis lebih dari nilai variabel itu. :)


23
2017-09-24 22:45



Mozilla MDN Web Docs berisi contoh dan penjelasan yang baik tentang const. Kutipan:

// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;

// this will throw an error - Uncaught TypeError: Assignment to constant variable.
MY_FAV = 20;

Tetapi sedih bahwa IE9 / 10 masih tidak mendukung const. Dan alasannya konyol:

Jadi, apa yang dilakukan IE9 dengan const? Begitu   jauh, keputusan kami adalah tidak   dukung itu. Ini belum menjadi konsensus   fitur karena belum pernah tersedia   di semua browser.

...

Pada akhirnya, sepertinya yang terbaik   solusi jangka panjang untuk web adalah   tinggalkan dan tunggu   proses standardisasi untuk menjalankannya   tentu saja.

Mereka tidak menerapkannya karena browser lain tidak menerapkannya dengan benar ?! Terlalu takut membuatnya lebih baik? Definisi standar atau tidak, konstanta adalah konstanta: ditetapkan sekali, tidak pernah berubah.

Dan untuk semua ide: Setiap fungsi dapat ditimpa (XSS, dll.). Jadi tidak ada perbedaan var atau function(){return}. const adalah satu-satunya konstanta nyata.

Memperbarui: IE11 mendukung  const:

IE11 termasuk dukungan untuk fitur yang didefinisikan dengan baik dan umum digunakan dari standar ECMAScript 6 yang muncul termasuk biarkan, const, Map, Set, dan WeakMap, sebaik __proto__ untuk meningkatkan interoperabilitas.


19
2018-04-30 09:57



Dalam JavaScript, preferensi saya adalah menggunakan fungsi untuk mengembalikan nilai konstan.

function MY_CONSTANT() {
   return "some-value";
}


alert(MY_CONSTANT());

18
2017-11-24 19:46