Saya tahu bahwa saya dapat menguji variabel javascript dan kemudian mendefinisikannya jika tidak terdefinisi, tetapi apakah tidak ada cara untuk mengatakannya
var setVariable = localStorage.getItem ('value') || 0;
sepertinya cara yang jauh lebih jelas, dan saya cukup yakin saya telah melihat ini dalam bahasa lain.
javascript
undefined
pedalpete
sumber
sumber
localStorage.getItem()
akan mengeluarkan pengecualian jika pengguna telah menonaktifkan cookie (setidaknya di Chrome), jadi Anda mungkin ingin membungkusnya dalamtry...catch
klausaJawaban:
Ya, itu bisa melakukan itu, tetapi sebenarnya yang akan menetapkan nilai default jika nilai yang diambil adalah falsey , yang bertentangan dengan benar-benar tidak terdefinisi . Ini akan karena itu tidak hanya cocok
undefined
tetapi juganull
,false
,0
,NaN
,""
(tapi tidak"0"
).Jika Anda ingin menetapkan ke default hanya jika variabel benar-benar
undefined
maka cara paling aman adalah menulis:Pada browser yang lebih baru sebenarnya aman untuk menulis:
tetapi perlu diketahui bahwa ini mungkin untuk menumbangkan ini di browser lama di mana ia diizinkan untuk mendeklarasikan variabel bernama
undefined
yang memiliki nilai yang ditentukan, yang menyebabkan tes gagal.sumber
var x = (x === undefined ? def_val : x);
sedikit lebih lamavar x = (typeof x === 'undefined') ? def_val : x;
. Apakah perilakunya berbeda?undefined
didefinisikan ulang, menyebabkan pengujian kesetaraan gagal.||
pendekatan dalam pengujian ketat untuk undefined, Anda harus menggunakan tes eksplisit untukundefined
dengan bersyarat.Jawaban 2018 ES6 adalah :
Jika variabel x tidak terdefinisi, kembalikan variabel ... jika tidak, jika variabel x didefinisikan, kembalikan variabel x.
sumber
Object.is
tidak ada yang lebih baik daripada===
dalam kasus ini. "Operator === (dan operator == juga) memperlakukan nilai angka -0 dan +0 sama dan memperlakukan Number.NaN tidak sama dengan NaN." ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Tidak masalah di sini.Object.is
jika kedua operan mungkinNaN
.undefined
. Jadi===
akan bekerja 100% dari waktu, bukan hanya 98%. Keuntungan===
menjadi lebih mudah dibaca, terutama sekilas, lebih pendek dan menghindari pemanggilan metode yang tidak perlu. Secara pribadi saya hanya akan menggunakanObject.is()
ketika situasi membutuhkannya dan lebih suka===
dalam semua kasus lainnya.Saya perlu "mengatur variabel jika tidak terdefinisi" di beberapa tempat. Saya membuat fungsi menggunakan jawaban @Alnakak. Semoga ini membantu seseorang.
Pemakaian:
sumber
Tampaknya lebih logis untuk memeriksa
typeof
bukanundefined
? Saya berasumsi Anda mengharapkan nomor ketika Anda mengatur var0
ketika tidak ditentukan:Dalam hal ini jika
getVariable
bukan angka (string, objek, apa pun), setVariable diatur ke0
sumber
ES2020 Jawab
Dengan Operator Penggabungan Nullish , Anda dapat menetapkan nilai default jika
value
null atau tidak terdefinisi.Namun, Anda harus menyadari bahwa operator penggabungan nol tidak mengembalikan nilai default untuk jenis nilai falsy lainnya seperti
0
dan''
.Perhatikan bahwa dukungan browser untuk operator terbatas. Menurut data dari caniuse , hanya 48,34% browser yang didukung (per April 2020). Dukungan Node.js telah ditambahkan di versi 14 .
sumber
Jika Anda seorang penggemar FP ( pemrograman fungsional ), Ramda memiliki fungsi pembantu yang rapi untuk ini yang disebut defaultTo :
pemakaian:
const result = defaultTo(30)(value)
Ini lebih berguna ketika berhadapan dengan
undefined
nilai boolean:const result2 = defaultTo(false)(dashboard.someValue)
sumber
const result = value || 30;
, kecuali menggunakan fungsi di antara dan +1000 byte libvar setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
sumber
localStorage.getItem('value'))
kembalifalse
Berlari ke skenario ini hari ini juga di mana saya tidak ingin nol ditimpa untuk beberapa nilai. Kami memiliki file dengan beberapa metode utilitas umum untuk skenario seperti ini. Inilah yang saya tambahkan untuk menangani skenario dan menjadi fleksibel.
Kemudian dapat dipanggil dengan dua parameter terakhir menjadi opsional jika saya hanya ingin menetapkan nilai yang tidak ditentukan atau juga menimpa nilai nol atau 0. Berikut adalah contoh panggilan untuk itu yang akan menetapkan ID ke -1 jika ID tidak terdefinisi atau nol, tetapi tidak akan menimpa nilai 0.
sumber
Di zaman kami, Anda sebenarnya dapat melakukan pendekatan dengan JS:
Jadi contoh Anda AKAN bekerja:
sumber
Bekerja bahkan jika nilai default adalah nilai boolean:
sumber
Menurut saya, untuk implementasi javascript saat ini,
adalah cara yang bagus untuk melakukan ini (menggunakan dekonstruksi objek).
sumber
Penugasan nullish yang logis, solusi ES2020 +
Operator baru saat ini sedang ditambahkan ke browser,
??=
,||=
, dan&&=
. Pos ini akan menjadi fokus??=
.Ini memeriksa apakah sisi kiri tidak terdefinisi atau nol, korsleting jika sudah ditentukan. Jika tidak, sisi kanan ditugaskan ke variabel sisi kiri.
Metode Membandingkan
Contoh dasar
Contoh Obyek / Array
?? = Dukungan Browser Juli 2020 - .03%
?? = Dokumentasi Mozilla
|| = Dokumentasi Mozilla
&& = Dokumentasi Mozilla
sumber