Karena TypeScript sangat diketik, cukup gunakan if () {}
untuk memeriksa null
dan undefined
tidak terdengar benar.
Apakah TypeScript memiliki fungsi khusus atau sintaksis gula untuk ini?
typescript
null-check
David Liu
sumber
sumber
Since TypeScript is strongly-typed
Saya tidak dapat menemukan ini di dokumen itu dan saya ragu tentang hal itu ...Jawaban:
Menggunakan cek-juggling, Anda dapat menguji keduanya
null
danundefined
dalam satu pukulan:Jika Anda menggunakan pemeriksaan ketat, itu hanya akan benar untuk nilai yang disetel ke
null
dan tidak akan dievaluasi sebagai benar untuk variabel yang tidak ditentukan:Anda dapat mencoba ini dengan berbagai nilai menggunakan contoh ini:
Keluaran
sumber
"false" == false
string yang tidak kosong seperti "false" dievaluasitrue
.if(x)
pemeriksaan gaya truthy / falsey , tetapi tidakif(x == null)
, yang hanya menangkapnull
danundefined
. Periksa menggunakannyavar c: number = 0; check(c, 'b');
bukan "sepenuhnya"null
,, atauundefined
.akan mengevaluasi
true
jikavalue
tidak:null
undefined
NaN
''
0
false
naskah termasuk aturan javascript.
sumber
TypeScript sepenuhnya memahami versi JavaScript yang ada
something == null
.TypeScript akan dengan benar mengesampingkan keduanya
null
danundefined
dengan pemeriksaan seperti itu.Lebih
https://basarat.gitbook.io/typescript/recap/null-undefined
sumber
myVar == null
. Hanya pilihan lain.== null
adalah cara yang benar untuk menguji null & tidak terdefinisi.!!something
adalah paksaan yang tidak berguna dalam kondisi di JS (hanya digunakansomething
).!!something
akan juga memaksa 0 dan '' ke false, yang bukan apa yang ingin Anda lakukan jika Anda mencari null / undefined.Saya melakukan berbagai tes di taman bermain naskah:
http://www.typescriptlang.org/play/
memberi:
begitu:
sumber
Saya pikir jawaban ini membutuhkan pembaruan, periksa riwayat edit untuk jawaban yang lama.
Pada dasarnya, Anda memiliki tiga kasus berbeda nol, tidak terdefinisi, dan tidak diumumkan, lihat cuplikan di bawah ini.
Anda akan mendapatkan kesalahan yang mengatakan bahwa variabel
message
tidak terdefinisi (alias tidak dideklarasikan), tentu saja, kompiler Script tidak boleh membiarkan Anda melakukan itu tetapi BENAR-BENAR tidak ada yang dapat mencegah Anda.Compiler akan dengan senang hati mengkompilasi kode di atas. Jadi, jika Anda yakin bahwa semua variabel dideklarasikan, Anda bisa melakukannya
kode di atas akan memeriksa
null
danundefined
, TETAPI jikamessage
variabelnya mungkin tidak dideklarasikan (untuk keamanan), Anda dapat mempertimbangkan kode berikutCatatan: pesanan di sini
typeof(message) !== 'undefined' && message !== null
sangat penting, Anda harus memeriksaundefined
keadaan terlebih dahulu, sama saja denganmessage != null
, terima kasih @Jaider.sumber
if(typeof something !== 'undefined' && something !== null){...}
Dalam TypeScript 3.7 sekarang kita memiliki rantai opsional dan Nullish Penggabungan untuk memeriksa nol dan undefined dalam waktu yang sama, contoh:
kode ini akan memeriksa apakah foo didefinisikan sebaliknya akan kembali tidak terdefinisi
cara lama :
ini:
Dengan rantai opsional akan:
fitur baru lainnya adalah Nullish Coalescing , contoh:
cara lama:
sumber
Anda mungkin ingin mencoba
dengan
!!
.Penjelasan
Yang pertama
!
akan mengubah ekspresi Anda menjadi sebuahboolean
nilai.Kemudian
!someValue
adalahtrue
jikasomeValue
adalah falsy danfalse
jikasomeValue
adalah truthy . Ini mungkin membingungkan.Dengan menambahkan lain
!
, ekspresi sekarangtrue
jikasomeValue
ini truthy danfalse
jikasomeValue
adalah falsy , yang jauh lebih mudah untuk mengelola.Diskusi
Sekarang, mengapa saya repot-repot
if (!!someValue)
ketika sesuatu sepertiif (someValue)
akan memberi saya hasil yang sama?Karena
!!someValue
justru ungkapan boolean, padahalsomeValue
bisa jadi apa saja. Ekspresi semacam ini sekarang akan memungkinkan untuk menulis fungsi (dan Tuhan membutuhkan kita) seperti:dari pada:
Saya harap ini membantu.
sumber
!!'false'
memangtrue
karena'false'
merupakan string yang validUntuk itu
Typescript 2.x.x
Anda harus melakukannya dengan cara berikut (menggunakan tipe guard ):tl; dr
Mengapa?
Dengan cara ini
isDefined()
akan menghormati jenis variabel dan kode berikut akan tahu ambil akun cek ini.Contoh 1 - cek dasar:
Contoh 2 - jenis hormat:
sumber
itu berarti! data
sumber
true
ataufalse
hanya. Jika Anda memiliki boolean dengannull
penugasan atauundefined
nilai, dalam kedua kasus nilai akan dievaluasi sebagaifalse
.Jika Anda menggunakan TypeScript, itu adalah pendekatan yang lebih baik untuk membiarkan kompiler memeriksa nol dan tidak terdefinisi (atau kemungkinan daripadanya), daripada memeriksanya pada saat run-time. (Jika Anda ingin memeriksa pada saat run-time, maka seperti yang ditunjukkan oleh banyak jawaban, gunakan saja
value == null
).Gunakan opsi kompilasi
strictNullChecks
untuk memberi tahu kompiler untuk mencekik kemungkinan nilai nol atau tidak terdefinisi. Jika Anda menetapkan pilihan ini, dan kemudian ada situasi di mana Anda tidak ingin mengizinkan nol dan terdefinisi, Anda dapat menentukan jenis sebagaiType | null | undefined
.sumber
Jika Anda ingin lulus
tslint
tanpa pengaturanstrict-boolean-expressions
untukallow-null-union
atauallow-undefined-union
, Anda perlu menggunakanisNullOrUndefined
darinode
'sutil
modul atau roll Anda sendiri:Bukan gula sintaksis tetapi berguna ketika aturan tslint Anda ketat.
sumber
Notasi yang lebih cepat dan lebih pendek untuk
null
cek dapat:Baris ini setara dengan:
Terutama ketika Anda memiliki banyak
null
cek itu adalah notasi pendek yang bagus.sumber
Saya punya masalah ini dan beberapa jawaban berfungsi dengan baik untuk
JS
tetapi tidak untuk diTS
sini adalah alasannya.Itu semua baik karena JS tidak memiliki Jenis
Dalam TS jika variabel tidak didefinisikan dengan
null
ketika Anda mencoba untuk memeriksa bahwanull
itutslint
| kompiler akan mengeluh.sumber
Terlambat untuk bergabung dengan utas ini, tetapi saya menemukan peretasan JavaScript ini sangat berguna dalam memeriksa apakah suatu nilai tidak ditentukan
sumber
Biasanya saya melakukan pemeriksaan juggling seperti yang sudah dibahas Fenton . Untuk membuatnya lebih mudah dibaca, Anda dapat menggunakan isNil dari ramda.
sumber
Sebagai cara verbose, jika Anda ingin membandingkan nilai-nilai null dan undefined ONLY , gunakan contoh kode berikut untuk referensi:
Jika
incomingValue
tidak dideklarasikan, TypeScript harus mengembalikan pengecualian. Jika ini dinyatakan tetapi tidak didefinisikan, theconsole.log()
akan mengembalikan "Nilai masuk adalah: tidak terdefinisi". Catatan kami tidak menggunakan operator sama dengan ketat.Cara "benar" (periksa jawaban lain untuk detail), jika
incomingValue
bukanboolean
tipe, cukup evaluasi jika nilainya benar, ini akan dievaluasi sesuai dengan tipe konstan / variabel. Sebuahtrue
string harus didefinisikan secara eksplisit sebagai string menggunakan= ''
penugasan. Jika tidak, itu akan dievaluasi sebagaifalse
. Mari kita periksa kasus ini menggunakan konteks yang sama:sumber
kamu bisa menggunakan
sumber
Semua,
Jawaban dengan suara terbanyak, tidak benar-benar berfungsi jika Anda bekerja dengan suatu objek. Dalam hal itu, jika sebuah properti tidak ada, cek tidak akan berfungsi. Dan itu adalah masalah dalam kasus kami: lihat contoh ini:
Hasil:
tautan plunkr: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
sumber
null
. Coba ini: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=previewKarena TypeScript adalah superset yang diketik dari JavaScript ES6. Dan lodash adalah perpustakaan javascript.
Menggunakan lodash untuk memeriksa apakah nilai nol atau tidak dapat ditentukan dapat dilakukan dengan menggunakan
_.isNil()
.Argumen
nilai (*): Nilai yang akan diperiksa.
Kembali
(boolean) : Mengembalikan nilai true jika nilai nullish, atau false.
Contoh
Tautan
Lodash Documents
sumber
Hati-hati jika Anda menggunakan penyimpanan lokal, Anda bisa berakhir dengan string tidak terdefinisi daripada nilai tidak terdefinisi:
Orang-orang mungkin menemukan ini berguna: https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts
sumber
Saya selalu menulis seperti ini:
Ini akan berfungsi dengan baik dan saya pikir itu sangat mudah dibaca.
sumber
0
juga lulus!foo
tes.undefined
berbedafalse
. Ini sangat umum dengan parameter fungsi boolean opsional, di mana Anda harus menggunakan pendekatan JavaScript yang umum:function fn(flag?: boolean) { if (typeof flag === "undefined") flag = true; /* set default value */ }
var isTrue; if(isTrue)//skips, if(!isTrue)// enters if(isTrue === undefined)//enters
. Juga mencobanya dalam naskah denganvar isTrue:boolean
yang tidak terdefinisi, dan sama jika diperiksa. @Gingi, apakah ada sesuatu yang berbeda tentang apa yang Anda coba dan apa yang saya coba?