Apakah ada fungsi JavaScript universal yang memeriksa bahwa suatu variabel memiliki nilai dan memastikan bahwa itu bukan undefined
atau tidak null
? Saya sudah mendapatkan kode ini, tetapi saya tidak yakin apakah ini mencakup semua kasus:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
(truthy statement) ? true : false;
. Lakukan saja(truthy statement);
.if (hungry) …
bukanif (hungry === true) …
. Seperti semua hal pengkodean dengan cara ini, itu hanya masalah selera. Lebih spesifik pada contoh yang diberikan oleh OP, dia mengatakan dengan lebih tegas lagi, "Jika itu benar, maka benar, jika tidak maka salah" Tetapi jika itu benar, maka itu sudah benar. Dan, jika itu salah, itu sudah salah. Ini mirip dengan mengatakan "Jika Anda lapar maka Anda adalah, dan jika tidak maka Anda tidak."Jawaban:
Anda bisa memeriksa apakah variabel memiliki
truthy
nilai atau tidak. Itu berartiakan mengevaluasi untuk
true
jikavalue
ini tidak :Daftar di atas mewakili semua
falsy
nilai yang mungkin dalam ECMA- / Javascript. Temukan dalam spesifikasi diToBoolean
bagian.Selain itu, jika Anda tidak tahu apakah ada variabel (artinya, jika dideklarasikan ), Anda harus menanyakannya kepada
typeof
operator. ContohnyaJika Anda dapat memastikan bahwa suatu variabel dinyatakan setidaknya, Anda harus langsung memeriksa apakah ia memiliki
truthy
nilai seperti yang ditunjukkan di atas.Baca lebih lanjut: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html
sumber
if( value || value === false )
. Sama berlaku untuk semua nilai falsy , kita perlu memvalidasi untuk mereka secara eksplisit.truthy
bisa menyesatkan. Dalam hal ini kita harus memeriksavalue.length != 0
array yang tidak kosong.if
membangun adalah sintaksis terlalu berat, Anda bisa menggunakan operator ternary, seperti:var result = undefined ? "truthy" : "falsy"
. Atau jika Anda hanya ingin memaksa untuk nilai boolean, gunakan!!
operator, misalnya!!1 // true
,!!null // false
.Metode verbose untuk memeriksa apakah nilai tidak terdefinisi atau nol adalah:
Anda juga dapat menggunakan
==
operator tetapi ini mengharapkan seseorang untuk mengetahui semua aturan :sumber
null
atauundefined
bisa dilakukan seperti:if (value == null)
. Pikirkan==
operator yang memaksa. Jika Anda memeriksa seperti iniif (value === null || value === undefined)
, Anda lupa / tidak tahu bagaimana Javascript memaksa. webreflection.blogspot.nl/2010/10/…arg == null
menghasilkan hasil yang sama denganarg === undefined || arg === null
. Namun, saya menganggap contoh terakhir lebih mudah dibaca.arg == null
cukup umum dalam pengalaman saya.return value === (void 0)
lebih aman daripada pengujian terhadapundefined
yang mungkin menjadi variabel yang sah dalam ruang lingkup, sayangnya.Ini akan mengembalikan true untuk
dan fungsi argumen nol sejak fungsi
length
adalah jumlah parameter yang dideklarasikan yang diperlukan.Untuk melarang kategori yang terakhir, Anda mungkin ingin memeriksa string kosong saja
sumber
undefined == null
tapiundefined !== null
Ini adalah pemeriksaan teraman dan saya belum melihatnya diposting di sini persis seperti itu:
Ini akan mencakup kasus-kasus di mana nilainya tidak pernah didefinisikan, dan juga salah satu dari ini:
Diedit: Diubah ke kesetaraan ketat (! ==) karena sudah menjadi norma sekarang;)
sumber
typeof
operator untuk mengembalikan string sehingga menggunakan pemeriksaan kesetaraan yang ketat secara teknis lebih akurat, lebih spesifik, dan lebih cepat. Jadi sungguh, tidak ada alasan untuk menggunakan perbandingan yang longgar, bukan sebaliknya. Jugaval !== null
sangat valid dalam banyak kasus - saya selalu melakukannya. Saya setuju dengan argumen ketidaksesuaian Anda, tetapi saya pikir ini adalah contoh yang buruk untuk membuatnya. Tidak mencoba menjebakmu.Anda mungkin menemukan fungsi berikut bermanfaat:
Atau di ES7 (komentar jika perbaikan lebih lanjut)
Hasil:
"Perhatikan bahwa operator bind (: :) bukan bagian dari ES2016 (ES7) atau edisi standar ECMAScript yang lebih baru sama sekali. Ini saat ini merupakan proposal tahap 0 (strawman) untuk diperkenalkan ke bahasa tersebut." - Simon Kjellberg. penulis ingin menambahkan dukungannya untuk proposal yang indah ini untuk menerima kenaikan kerajaan.
sumber
::
) bukan bagian dari ES2016 (ES7) atau edisi standar ECMAScript yang lebih baru. Saat ini proposal tahap 0 (stroberi) untuk diperkenalkan ke bahasa.Jawaban pertama dengan peringkat terbaik salah. Jika nilai tidak terdefinisi, itu akan membuat pengecualian di browser modern. Anda harus menggunakan:
atau
sumber
undefined
nilai.if(value === 0) gameOver();
;)value
nol, yang bukan apa yang dicari oleh op.Periksa kondisi ini
itu yang kamu butuhkan.
sumber
if
sudah melakukan pemeriksaan palsu, yang ini hanya mengkonversi ke Boolean. Apakah ia menangkap kasus yangif(foo)
tidak ditangkap oleh orang normal ?active={!!foo}
! periksa string kosong (""), null, undefined, false dan angka 0 dan NaN. Katakan, jika sebuah string kosong
var name = ""
makaconsole.log(!name)
kembalitrue
.fungsi ini akan mengembalikan true jika val adalah kosong, null, terdefinisi, palsu, angka 0 atau NaN .
ATAU
Menurut domain masalah Anda, Anda bisa menggunakan like
!val
atau!!val
.sumber
isEmpty(val)
jika Anda bisa melakukannya!val
?!val
atau!!val
sesuai dengan domain masalah Anda.Solusi yang sangat saya sukai:
Mari kita mendefinisikan bahwa variabel kosong adalah
null
, atauundefined
, atau jika memiliki panjang, itu adalah nol, atau jika itu adalah objek, itu tidak memiliki kunci:Pengembalian:
undefined
,null
,""
,[]
,{}
true
,false
,1
,0
,-1
,"foo"
,[1, 2, 3]
,{ foo: 1 }
sumber
Anda sedikit berlebihan. Untuk memeriksa apakah suatu variabel tidak diberi nilai, Anda hanya perlu memeriksa terhadap undefined dan null.
Ini dengan asumsi
0
,,""
dan objek (bahkan objek dan array kosong) adalah "nilai" yang valid.sumber
Jika Anda lebih suka javascript biasa coba ini:
Jika tidak, jika Anda sudah menggunakan garis bawah atau lodash, coba:
sumber
_.isNil
adalah fungsi yang Anda cari, bukan_.isEmpty
. Dokumentasi isNil , dokumentasi isEmptyisArray
atauisString
fungsi padawindow
.Ini milik saya - mengembalikan true jika nilainya nol, tidak terdefinisi, dll atau kosong (yaitu hanya berisi spasi kosong):
sumber
adalah cara yang sangat bagus dan bersih untuk menanganinya di banyak tempat, juga dapat digunakan untuk menetapkan variabel
sumber
true
dan Anda mencoba untuk memasok atau mengembalikanval
darifalse
.const res = falsyValue ? true : falsyValue
Jika variabel belum dideklarasikan, Anda tidak akan dapat menguji undefined menggunakan fungsi karena Anda akan mendapatkan kesalahan.
Keduanya akan menghasilkan kesalahan jika foo belum dideklarasikan.
Jika Anda ingin menguji apakah suatu variabel telah dideklarasikan, Anda dapat menggunakan
jika Anda ingin menguji apakah foo telah dinyatakan dan memiliki nilai yang dapat Anda gunakan
sumber
Untuk memeriksa Nilai Default
periksa Hasil:
Saya menggunakan fungsi @Vix () untuk memeriksa objek jenis apa.
menggunakan instansof «
sumber
// Number Type [int, float literals ] var int = 77; var float = 77.7; console.log( int.toFixed(10) + '\t' + float.toFixed(10) ); // Object Type var number = new Number( 77 ); if( int != float ) console.log('Data Not Equal'); if( int == number && int !== number ) console.log('Data is Equal & Types vary');
Dalam ES6 dengan trim untuk menangani string spasi putih:
sumber
Mungkin bermanfaat.
Semua nilai dalam array mewakili apa yang Anda inginkan (null, undefined atau hal lain) dan Anda mencari apa yang Anda inginkan di dalamnya.
sumber
Jika Anda menggunakan
TypeScript
dan tidak ingin memperhitungkan "nilai-nilai itu adalahfalse
" maka ini adalah solusi untuk Anda:Pertama:
import { isNullOrUndefined } from 'util';
Kemudian:
isNullOrUndefined(this.yourVariableName)
Harap Dicatat: Seperti yang disebutkan di bawah ini sudah tidak digunakan lagi, gunakan
value === undefined || value === null
saja. ref .sumber
/** @deprecated since v4.0.0 - use "value === null || value === undefined" instead. */
typescript
hal. Bisakah Anda memberikan tautan dokumentasinya?Kekosongan
Saya tidak menyarankan mencoba mendefinisikan atau menggunakan fungsi yang menghitung apakah nilai di seluruh dunia kosong. Apa artinya menjadi "kosong"? Jika sudah
let human = { name: 'bob', stomach: 'empty' }
, haruskahisEmpty(human)
kembalitrue
? Jika sudahlet reg = new RegExp('');
, haruskahisEmpty(reg)
kembalitrue
? Bagaimana denganisEmpty([ null, null, null, null ])
- daftar ini hanya berisi kekosongan, jadi apakah daftar itu sendiri kosong? Saya ingin mengajukan beberapa catatan tentang "kekosongan" (kata yang sengaja dikaburkan, untuk menghindari asosiasi yang sudah ada sebelumnya) dalam javascript - dan saya ingin berdebat bahwa "kekosongan" dalam nilai-nilai javascript tidak boleh ditangani secara umum.Kebenaran / Kepalsuan
Untuk memutuskan bagaimana menentukan "kekosongan" dari nilai-nilai, kita perlu mengakomodasi inbuilt javascript, rasa yang melekat pada apakah nilai-nilai itu "benar" atau "salah". Secara alami,
null
danundefined
keduanya "palsu". Kurang alami, jumlahnya0
(dan tidak ada nomor lain kecualiNaN
) juga "palsu". Paling tidak secara alami:''
adalah palsu, tetapi[]
dan{}
(dannew Set()
, dannew Map()
) adalah kebenaran - meskipun mereka semua tampak sama-sama hampa!Null vs Tidak terdefinisi
Ada juga beberapa diskusi tentang
null
vsundefined
- apakah kita benar - benar membutuhkan keduanya untuk mengekspresikan kekosongan dalam program kita? Saya pribadi menghindari agar huruf-huruf u, n, d, e, f, i, n, e, d muncul dalam kode saya dalam urutan itu. Saya selalu menggunakannull
untuk menandakan "kekosongan". Namun, sekali lagi, kita perlu mengakomodasi pengertian inheren javascript tentang bagaimananull
danundefined
berbeda:undefined
undefined
:undefined
, bukannull
:Kekosongan non-generik
Saya percaya bahwa kekosongan seharusnya tidak pernah ditangani dengan cara yang umum. Sebagai gantinya, kita harus selalu memiliki kekakuan untuk mendapatkan lebih banyak informasi tentang data kita sebelum menentukan apakah data itu kosong - saya terutama melakukan ini dengan memeriksa jenis data apa yang saya hadapi:
Perhatikan bahwa fungsi ini mengabaikan polimorfisme - ia diharapkan
value
menjadi turunan langsung dariCls
, dan bukan turunan dari subkelas dariCls
. Saya menghindariinstanceof
karena dua alasan utama:([] instanceof Object) === true
("Array adalah Obyek")('' instanceof String) === false
("String bukan String")Perhatikan bahwa
Object.getPrototypeOf
digunakan untuk menghindari kasus sepertilet v = { constructor: String };
TheisType
fungsi masih kembali dengan benar untukisType(v, String)
(palsu), danisType(v, Object)
(benar).Secara keseluruhan, saya sarankan menggunakan
isType
fungsi ini bersama dengan tips ini:let v = JSON.parse(someRawValue);
,v
variabel kami sekarang dari tipe tidak dikenal. Sedini mungkin, kita harus membatasi kemungkinan kita. Cara terbaik untuk melakukan ini bisa dengan memerlukan jenis tertentu: misalnyaif (!isType(v, Array)) throw new Error('Expected Array');
- ini adalah cara yang sangat cepat dan ekspresif untuk menghilangkan sifat generikv
, dan memastikan itu selalu menjadiArray
. Namun, kadang-kadang, kita perlu mengizinkanv
beberapa tipe. Dalam kasus tersebut, kita harus membuat blok kodev
yang tidak lagi generik, sedini mungkin:if (v === null) throw new Error('Null value rejected');
- ini sangat bagus untuk memastikan bahwanull
nilai-nilai tidak membuatnya melalui, tetapi jika nilai tidak membuatnya melalui, kita masih tahu hampir tidak apapun tentang itu. Nilaiv
yang lolos dari pemeriksaan nol ini masih SANGAT generik - sama sekali tidaknull
! Daftar hitam hampir tidak menghilangkan sifat generik.Kecuali jika nilainya
null
, jangan pernah menganggap "nilai yang kosong". Sebagai gantinya, pertimbangkan "sebuah X yang kosong". Pada dasarnya, jangan pernah mempertimbangkan untuk melakukan hal sepertiif (isEmpty(val)) { /* ... */ }
- tidak peduli bagaimanaisEmpty
fungsi itu diimplementasikan (saya tidak ingin tahu ...), itu tidak berarti! Dan itu terlalu generik! Kekosongan seharusnya hanya dihitung denganval
tipe pengetahuan . Pengecekan kekosongan seharusnya terlihat seperti ini:if (isType(val, String) && val.length === 0) ...
if (isType(val, Object) && Object.entries(val).length === 0) ...
if (isType(val, Number) && val <= 0) ...
"An Array, tanpa item":
if (isType(val, Array) && val.length === 0) ...
Satu-satunya pengecualian adalah ketika
null
digunakan untuk menandakan fungsi tertentu. Dalam hal ini, bermakna untuk mengatakan: "Nilai kosong":if (val === null) ...
sumber
Coba Dengan Logika Berbeda . Anda dapat menggunakan kode di bawah ini untuk memeriksa keempat (4) kondisi untuk validasi seperti tidak nol, tidak kosong, tidak terdefinisi dan tidak nol hanya menggunakan kode ini (! (! (Variabel))) dalam javascript dan jquery.
sumber
Anda dapat memikirkan fitur ini -
??
operator - sebagai cara untuk "mundur" ke nilai default saat berhadapan dengannull
atauundefined
.Sekali lagi, kode di atas setara dengan yang berikut ini.
sumber
tetapi solusi ini direkayasa berlebihan, jika Anda tidak ingin memodifikasi fungsi nanti untuk keperluan model bisnis, maka lebih bersih untuk menggunakannya langsung dalam kode:
sumber
Ini tidak akan pernah membuat kesalahan. Jika myObject , anak , atau myValue adalah null maka myNewValue akan null. Tidak ada kesalahan yang akan terjadi
sumber
Untuk semua orang yang datang ke sini karena memiliki pertanyaan serupa, berikut ini berfungsi dengan baik dan saya memilikinya di perpustakaan saya tahun-tahun terakhir:
sumber
Jika Anda ingin menghindari kebenaran jika nilainya salah satu dari yang berikut, menurut jawaban jAndy :
Salah satu solusi yang mungkin menghindari menghindari nilai-nilai kebenaran adalah sebagai berikut:
Ini akan digunakan sebagai berikut:
Selain skenario itu, Anda mungkin ingin mengembalikan false jika objek atau array kosong:
Anda akan melakukannya dengan cara ini:
Jika Anda ingin memeriksa semua string spasi putih (""), Anda dapat melakukan hal berikut:
Catatan:
hasOwnProperty
mengembalikan true untuk string kosong, 0, false, NaN, null, dan undefined, jika variabel dinyatakan sebagai salah satu dari mereka, jadi itu mungkin bukan yang terbaik untuk digunakan. Fungsi dapat dimodifikasi untuk menggunakannya untuk menunjukkan bahwa itu dideklarasikan, tetapi tidak dapat digunakan.sumber
Kode pada GitHub
Tes orang miskin 😁
Hasil tes:
sumber
value.constructor === Object
? Lihat ini .value.constructor === Object
tidak apa-apa, dalam pernyataan IF ATAU javascript memiliki perintah eksekusi sehingga pernyataan ATAU hanya akan mengeksekusi jika sebelumnya tidak mengembalikan TRUE dan kami sudah memeriksaNull
. Bahkan satu-satunya tujuan pernyataan ATAU terakhir itu adalah untuk mendeteksi{}
dan memastikan itu tidak mengembalikan BENAR untuk hal-hal yang seharusnya tidak.Ini akan memeriksa apakah variabel sarang tidak ditentukan tidak terdefinisi
Di atas memeriksa apakah fungsi terjemahan Google TranslateElement ada. Ini setara dengan:
sumber
Operator rantai opsional menyediakan cara untuk menyederhanakan mengakses nilai melalui objek yang terhubung saat itu mungkin bahwa referensi atau fungsi mungkin tidak terdefinisi atau nol.
Operator penggabungan nullish dapat digunakan setelah perangkaian opsional untuk membangun nilai default ketika tidak ada yang ditemukan:
sumber
itu juga akan memeriksa spasi putih ('') bersama dengan yang berikut:
sumber
Saya pikir menggunakan? Operator sedikit lebih bersih.
sumber