Saya memiliki persyaratan untuk menerapkan ??
operator C # ke JavaScript dan saya tidak tahu caranya. Pertimbangkan ini di C #:
int i?=null;
int j=i ?? 10;//j is now 10
Sekarang saya sudah menyiapkan ini di JavaScript:
var options={
filters:{
firstName:'abc'
}
};
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter
Bagaimana cara melakukannya dengan benar?
Terima kasih.
EDIT: Saya melihat setengah dari masalah: Saya tidak dapat menggunakan notasi 'pengindeks' ke objek ( my_object[0]
). Apakah ada cara untuk melewatinya? (Saya tidak tahu nama properti filter sebelumnya dan tidak ingin mengulanginya).
javascript
Valentin Vasilyev
sumber
sumber
0
,,false
string kosong), saya akan melakukan sesuatu seperti ini:var j = (i === null) ? 10 : i;
Yang hanya akan menggantikannull
, daripada apa pun yang dapat dievaluasi menjadi salah.i
tidak ditentukan, ini akan membuat kesalahan. tampaknya tidak berguna bagi saya sehingga .. (?)var j = (i != null ? i : 10);
harus bekerja, karenaundefined
adalah==
nol, sehinggai != null
adalahfalse
untuk keduanull
danundefined
.Tidak; literal objek, seperti namanya, adalah objek , dan bukan array, jadi Anda tidak bisa begitu saja mengambil properti berdasarkan indeks, karena tidak ada urutan spesifik dari propertinya. Satu-satunya cara untuk mendapatkan kembali nilainya adalah dengan menggunakan nama tertentu:
Atau dengan mengulanginya menggunakan
for ... in
loop:sumber
for in
loop JS lucu ini hanya bekerja pada literal objek! Ini gagal total pada array JS (memberi indeks) dan JS Maps (memberiundefined
). Harap Anda tidak melupakannya, jangan sampai Anda akan terkejut dengan debugging! xPES2020 Jawaban
Baru Nullish penggabungan operator, akhirnya tersedia pada JavaScript, meskipun dukungan browser terbatas. Menurut data dari caniuse , hanya 48,34% browser yang didukung (per April 2020).
Menurut dokumentasi,
Ini akan memastikan bahwa kedua variabel Anda akan memiliki nilai fallback
''
iffilters[0]
ataufilters[1]
arenull
, atauundefined
.Perhatikan bahwa operator penggabungan nullish tidak mengembalikan nilai default untuk jenis nilai falsy lainnya seperti
0
dan''
. Jika Anda ingin memperhitungkan semua nilai yang salah, Anda harus menggunakan operator ATAU||
.sumber
Penugasan nullish logis, solusi 2020+
Operator baru sedang ditambahkan ke browser
??=
,. Ini sama denganvalue = value ?? defaultValue
.||=
dan&&=
juga datang, tautan di bawah.Ini memeriksa apakah sisi kiri tidak ditentukan atau nol, hubungan pendek jika sudah ditentukan. Jika tidak, sisi kiri diberi nilai sisi kanan.
Contoh Dasar
Contoh Objek / Array
Contoh Fungsional
?? = Dukungan Browser Juli 2020 - .03%
?? = Dokumentasi Mozilla
|| = Dokumentasi Mozilla
&& = Dokumentasi Mozilla
sumber
Solusi perusak
Isi pertanyaan mungkin telah berubah, jadi saya akan mencoba menjawab dengan seksama.
Destrukturisasi memungkinkan Anda menarik nilai dari apa pun yang memiliki properti. Anda juga dapat menentukan nilai default ketika null / undefined dan name alias.
Jika bekerja dengan sebuah array, berikut adalah cara Anda melakukannya.
Dalam kasus ini, nama diekstrak dari setiap objek dalam larik, dan diberi aliasnya sendiri. Karena objek mungkin tidak ada
= {}
juga ditambahkan.Tutorial Lebih Detail
Dukungan Browser 92% Juli 2020
sumber