Bagaimana saya bisa menentukan apakah suatu variabel 'tidak terdefinisi' atau 'nol'?

2131

Bagaimana cara menentukan apakah variabelnya undefinedatau null?

Kode saya adalah sebagai berikut:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

Tetapi jika saya melakukan ini, penerjemah JavaScript menghentikan eksekusi.

gelombang mikro
sumber

Jawaban:

2851

Anda dapat menggunakan kualitas dari operator kesetaraan abstrak untuk melakukan ini:

if (variable == null){
    // your code here.
}

Karena null == undefineditu benar, kode di atas akan menangkap keduanya nulldan undefined.

Sarfraz
sumber
5
Saya mencoba menguji apakah acara adalah nol di firefox dan kesalahan memblokir eksekusi: "acara tidak ditentukan"
Entretoize
3
@MichaelFever Bagaimana itu tidak berfungsi? Salin tempel ini di konsol Anda: const y = undefined; y == null;Seharusnya kembalitrue
Seraf
2
@ChrisStryczynski Sebagai contoh dari komentar Anda Anda menyatakan ykonstan, tetapi Anda ware membandingkan abc(tidak y). Ketika saya uji ymelalui console.log(y == null);di Chrome dan Firefox saya mendapat truehasilnya. Jika Anda mendapat kesalahan maka mungkin Anda mencoba menggunakan operator penugasan =alih-alih perbandingan ==yang masuk akal untuk mengembalikan kesalahan karena consttidak dapat dipindahkan.
Pshemo
2
contoh langsung dari perbandingan yang relevan. lgtm.
Ryan Haining
2
@ ZaytsevDmitry mengapa Anda mengharapkan tes jika suatu variabel nullatau undefinedlulus jika variabelnya sama 0? Pertanyaannya bukan tentang pengujian untuk nilai kebenaran, melainkan pengujian secara eksplisit untuk nullatau undefined.
rodrigo-silveira
1108

Cara standar untuk menangkap nulldan undefinedsecara bersamaan adalah ini:

if (variable == null) {
     // do something 
}

--yang 100% setara dengan yang lebih eksplisit tetapi kurang ringkas:

if (variable === undefined || variable === null) {
     // do something 
}

Saat menulis JS profesional, anggaplah jenis kesetaraan dan perilaku ==vs=== dipahami. Karena itu kami menggunakan ==dan hanya membandingkan null.


Edit lagi

Komentar yang menyarankan penggunaan typeofhanya salah. Ya, solusi saya di atas akan menyebabkan ReferenceError jika variabel tidak ada. Ini hal yang baik. ReferenceError ini diinginkan: ini akan membantu Anda menemukan kesalahan Anda dan memperbaikinya sebelum Anda mengirimkan kode Anda, seperti halnya kesalahan kompiler dalam bahasa lain. Gunakan try/ catchjika Anda bekerja dengan input, Anda tidak memiliki kendali atas.

Anda tidak boleh memiliki referensi ke variabel yang tidak dideklarasikan dalam kode Anda.

temporary_user_name
sumber
47
Ini akan menyebabkan ReferenceError dan menghentikan eksekusi jika variabel tidak didefinisikan atau dirujuk sama sekali dalam kode, menggunakan typeof lebih aman.
Mani Gandham
56
Itu lebih dari titik gaya. Jika variabel belum dideklarasikan sama sekali , itu hanya tulisan yang buruk di pihak penulis. Anda harus tahu apakah variabel Anda telah dinyatakan atau tidak, itu seharusnya tidak menjadi pertanyaan. Tapi ya , jika karena alasan tertentu , ini harus diubah ke window.variable bukan hanya variabel , yang tidak akan menyebabkan kesalahan referensi. Jenis harus dihindari.
temporary_user_name
6
Ya karena Anda tulis !==bukan !=.
temporary_user_name
9
-OP: Pernyataan tentang perbandingan yang menjadi "100% setara" itu SEDERHANA, seperti yang Anda catat di EDIT Anda sendiri, yang kedua akan menyebabkan ReferenceError. Adapun pernyataan: "Anda seharusnya tidak memiliki referensi untuk variabel yang tidak dideklarasikan dalam kode Anda." BETULKAH? Pernah mendengar tentang Parameter Opsional? jsfiddle.net/3xnbxfsu
Timothy Kanski
16
Parameter opsional @TimothyKanski mungkin tidak terdefinisi jika secara opsional tidak disediakan, tetapi mereka adalah variabel yang paling pasti dideklarasikan. Mereka dideklarasikan dan memiliki nilai undefined, seperti variabel apa pun yang dideklarasikan tetapi tidak diinisialisasi, yaitu, var someVar;sehingga argumen Anda tidak benar-benar tahan
chiliNUT
228

Menggabungkan jawaban di atas, tampaknya jawaban yang paling lengkap adalah:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

Ini harus berfungsi untuk variabel apa pun yang tidak dideklarasikan atau dideklarasikan dan secara eksplisit diatur ke nol atau tidak terdefinisi. Ekspresi boolean harus dievaluasi menjadi false untuk setiap variabel yang dideklarasikan yang memiliki nilai bukan nol yang sebenarnya.

jkindwall
sumber
2
@Aerovistae Saya tahu itu typeofadalah operator, bukan fungsi, jadi tidak perlu tanda kurung, tapi saya tetap menghargai tanda kurung - hanya untuk membaca kejelasan.
user664833
1
bagaimana dengan langsung memeriksa apakah (variabel === tidak terdefinisi) alih-alih menggunakan typeof?
Frozen Crayon
2
@ ArjunU yang akan menyebabkan ReferenceError jika variabel tidak dideklarasikan. Jika Anda tidak tahu apakah suatu variabel dinyatakan atau tidak, gunakan solusi di atas. Jika Anda dapat menjamin bahwa variabel tersebut setidaknya dideklarasikan, Anda dapat menggunakanvariable == null
Rogue
3
Ini adalah solusi yang lebih baik karena seperti yang ditunjukkan @Rogue, variabel mungkin tidak dideklarasikan.
Abdul Sadik Yalcin
Koreksi saya jika saya salah, tetapi bukankah conditional pertama superset dari yang kedua, dan oleh karena itu conditional kedua berlebihan?
Maret Maret
187
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
knocte
sumber
14
Kalau-kalau ada yang berpikir ini adalah setengah jawaban, ini benar-benar berhasil. undefinedmengevaluasi sama dengan null.
Chuck
3
Gagal pada saya di konsol chrome ... ReferenceError: variabel tidak didefinisikan, jadi mungkin berfungsi, tetapi tidak bagi saya ...
Eran Medan
48
Ini hanya berfungsi untuk variabel yang dideklarasikan, bukan variabel yang mungkin atau mungkin tidak dinyatakan, yang jarang terjadi. (Anda perlu menggunakan typeof + cek nol untuk kasus itu)
11
Baru tahu, Anda dapat menambahkan komentar ini: /*jshint eqnull:true */ke bagian atas dokumen atau fungsi JS Anda, dan JSHint akan berhenti memperingatkan Anda tentang penggunaan Anda atas == null.
Web_Designer
3
@Aerovistae dapatkah Anda mengarahkan saya ke referensi yang secara eksplisit menyatakan bahwa ==itu rusak. Pemaksaan if(variable == null)dalam jawaban ini sangat masuk akal bagi saya ...
Ben Aston
94
if (typeof EmpName != 'undefined' && EmpName) {

akan bernilai true jika nilainya tidak:

  • batal

  • tidak terdefinisi

  • NaN

  • string kosong ("")

  • 0

  • Salah

Thamaraiselvam
sumber
13
Saya pikir ini adalah teknik berbahaya yang menyebar seperti api liar. Karena banyak variabel yang diperiksa bisa boolean atau angka. Jadi jika pengguna tidak sepenuhnya memahami konsekuensinya, ini tidak baik.
bermanfaatBee
Harap berikan referensi spesifikasi javascript ini
villamejia
1
Ini sama dengan if (EmpName). Jika sudah undefinedakan palsu.
Rudy
1
Jika variabel tidak ditentukan. maka jika (EmpName) akan melempar kesalahan
Thamaraiselvam
1
@Thamaraiselvam, saya pikir Rudy mungkin maksudkan ini var EmpName; if (EmpName). Di mana variabel didefinisikan tetapi tidak diberi nilai.
hungerstar
28

attr()Fungsi jQuery mengembalikan string kosong atau nilai aktual (dan tidak pernah nullatau undefined). Satu-satunya waktu ia kembaliundefined adalah ketika pemilih Anda tidak mengembalikan elemen apa pun.

Jadi, Anda mungkin ingin menguji terhadap string kosong. Atau, karena string kosong, null dan undefined adalah false-y, Anda bisa melakukan ini:

if (!EmpName) { //do something }
Chetan Sastry
sumber
1
Chrome 17.0.963.78 m memberikan kesalahan ini:ReferenceError: EmpName is not defined
Eran Medan
6
@EranMedan Saya tahu ini sudah terlambat, tapi semoga akan membantu orang yang datang ke sini nanti. Alasan Anda mendapatkan kesalahan adalah karena belum dinyatakan sama sekali. Biasanya Anda akan memiliki EmpName (atau variabel lain) diteruskan ke fungsi, atau nilai pengembalian fungsi lain dan karenanya dinyatakan (Contoh: "var x;"). Untuk menguji apakah itu mengembalikan string yang tidak terdefinisi, atau null, atau kosong, Anda dapat menggunakan solusi di atas.
Dave
Saya menyadari ini adalah pertanyaan yang dingin, tetapi jQuery akan kembali undefinedjika atribut tidak ada pada elemen (tidak hanya jika pemilih tidak memiliki elemen yang cocok, sesuai jawabannya). Sebagai contoh, sebuah imgtanpa srcakan kembali undefineduntuk$('img').attr('src');
codinghands
20

Saya datang untuk menulis fungsi saya sendiri untuk ini. JavaScript itu aneh.

Dapat digunakan pada apa pun secara harfiah. (Perhatikan bahwa ini juga memeriksa apakah variabel berisi nilai yang dapat digunakan . Tetapi karena informasi ini biasanya juga diperlukan, saya pikir ini layak untuk dikirim). Silakan pertimbangkan untuk meninggalkan catatan.

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

Kompatibel dengan TypeScript.


Fungsi ini harus melakukan hal yang persis sama seperti empty()fungsi PHP (lihatRETURN VALUES )

Menganggap undefined, null, false, 0, 0.0, "0" {}, []sebagai kosong.

"0.0", NaN, " ", trueDianggap non-kosong.

phil294
sumber
2
Saya telah mengalami masalah pemeriksaan nol kecil. Saya ingin memeriksa apakah parameter yang dikirimkan adalah nol, atau objek kosong { }. Ini adalah masalah bahasa yang umum dan konyol, tetapi saya telah melupakannya. Semua pencarian saya menunjukkan jawaban untuk nilai nol yang tidak terdefinisi, atau perbandingan kesetaraan longgar (==), tetapi tidak kesetaraan ketat (===) atau setara. Dan di sini, di jawaban peringkat -1 Anda di bagian paling bawah halaman (sebelum saya tervvotasikan) adalah jawaban yang luput dari saya. Object.keys( obj ).length < 1atau mungkin === 0, dengan asumsi itu tidak akan pernah menjadi -1. Bagaimanapun, tervvotasikan ke 0, woo. : p
Terima kasih, saya bisa menghapus fungsi ini dan membersihkan banyak kode. Mengapa ini bukan fungsi JS standar di luar saya.
Andy
3
Anda harus mengubah semua Anda ==menjadi di ===sini, maka ini akan menjadi fungsi yang masuk akal.
Ben McIntyre
13

Jika variabel yang ingin Anda periksa adalah global, lakukan

if (window.yourVarName) {
    // Your code here
}

Cara memeriksa ini tidak akan menimbulkan kesalahan bahkan jika yourVarNamevariabel tidak ada.

Contoh: Saya ingin tahu apakah browser saya mendukung History API

if (window.history) {
    history.back();
}

Bagaimana ini bekerja:

windowadalah objek yang memegang semua variabel global sebagai propertinya, dan dalam JavaScript adalah sah untuk mencoba mengakses properti objek yang tidak ada. Jika historytidak ada maka window.historykembali undefined. undefinedadalah falsey, jadi kode dalam if(undefined){}blok tidak akan berjalan.

DenisS
sumber
2
Pembaca harus mencatat bahwa pendekatan seperti ini idiomatis untuk memeriksa - dari JavaScript yang berjalan di browser - apakah variabel global telah dideklarasikan, dan terutama apakah global yang disediakan browser (seperti API riwayat) tersedia. Ini tidak akan berfungsi untuk memeriksa apakah variabel non-global adalah nullatau undefined, juga tidak akan berfungsi jika JavaScript Anda berjalan di luar browser (yaitu di Node.js). Ini juga akan memperlakukan global diatur ke 0, falseatau ''sama dengan yang tidak dideklarasikan atau undefinedatau null, yang biasanya baik-baik saja.
Mark Amery
Ini mengasumsikan bahwa skrip berjalan di browser. Itu tidak diberikan.
GreenAsJade
13

Yang terpendek dan termudah:

if(!EmpName ){
 // DO SOMETHING
}

ini akan mengevaluasi true jika EmpName adalah:

  • batal
  • tidak terdefinisi
  • NaN
  • kosong
  • string ("")
  • 0
  • Salah
userPlus
sumber
3
Gunakan case di sini adalah bahwa saya ingin tahu perbedaan antara undefined dan false. Saya akan menggunakan cek pada nol.
gast128
12

Mungkin cara terpendek untuk melakukan ini adalah:

if(EmpName == null) { /* DO SOMETHING */ };

Ini buktinya:

Dan di sini adalah rincian lebih lanjut tentang ==(sumber di sini )

Masukkan deskripsi gambar di sini

BONUS : alasan mengapa ===lebih jelas daripada ==(lihat jawaban AGC )

Masukkan deskripsi gambar di sini

Kamil Kiełczewski
sumber
9

Saya baru saja mengalami masalah ini yaitu memeriksa apakah suatu objek adalah nol.
Saya hanya menggunakan ini:

if (object) {
    // Your code
}

Sebagai contoh:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}
Welshboy
sumber
3
akan lebih baik untuk mengatur var A = document.getElementById ("enterJob") jika (A) A.className + = 'current'; dengan cara ini Anda melakukan pekerjaan 50% untuk hasil yang sama ... Tapi mungkin Anda hanya melakukannya untuk pertunjukan dan kemudian saya salut.
Harry Svensson
8

Karena Anda menggunakan jQuery , Anda dapat menentukan apakah suatu variabel tidak terdefinisi atau nilainya nol dengan menggunakan fungsi tunggal.

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;
Angelin Nadar
sumber
Ini tidak berhasil untuk saya. Saya masih mendapatkan kesalahan: ReferenceError: s is not defineduntuk contoh pertama.
Tandai
6

Elemen cek jQuery bukan null:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}
Kapil
sumber
5

Dalam JavaScript, sesuai pengetahuan saya, kami dapat memeriksa variabel yang tidak terdefinisi, nol, atau kosong seperti di bawah ini.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

Periksa semua kondisi:

if(variable === undefined || variable === null || variable === ''){
}
DevAelius
sumber
varadalah kata yang dilindungi undang-undang, ini akan melemparSyntaxError
dhilt
5

Anda cukup menggunakan yang berikut ini (saya tahu ada cara yang lebih pendek untuk melakukan ini, tetapi ini dapat membuatnya lebih mudah untuk diamati secara visual, setidaknya untuk orang lain yang melihat kode).

if (x === null || x === undefined) {
 // Add your response code here, etc.
}
agc
sumber
4

Cara termudah untuk memeriksa adalah:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}
M. Arnold
sumber
1
Ini akan mengeksekusi kode jika variabel memiliki nilai false, yang berpotensi tidak diinginkan.
byxor
Pertanyaannya jelas, "Bagaimana menentukan apakah variabel 'tidak terdefinisi' atau 'nol'?" dan dalam javascript jika suatu variabel memiliki nilai nol atau tidak terdefinisi, nilainya salah.
M. Arnold
1
Maaf, tapi itu tidak benar. Berikut adalah JSfiddle untuk membuktikannya.
byxor
Dengan jawaban Anda undefined,, null dan beberapa hal lain seperti string kosong, +0, -0 NaNdan falselewati. !operator memaksa operan di sini variable- ke Boolean: ecma-international.org/ecma-262/#sec-toboolean
Alireza
Tetapi periksa pertanyaan: "Bagaimana menentukan apakah suatu variabel tidak terdefinisi atau nol", the! operan yang digunakan dengan if akan selalu kembali ke true jika variabelnya null atau tidak terdefinisi.
M. Arnold
3

Dengan solusi di bawah ini:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

Saya dapat memeriksa hal-hal berikut:

  • batal
  • tidak terdefinisi
  • NaN
  • kosong
  • string ("")
  • 0
  • Salah
Tony Tai Nguyen
sumber
Ini tidak menjawab pertanyaan, yaitu "bagaimana saya menangkap nol dan tidak terdefinisi?" bukan "bagaimana cara menangkap setiap nilai falsey dalam JavaScript?"
temporary_user_name
@Aerovistae, saya pikir saya lakukan dengan console.log (isDeepEqual (null, null)); dan console.log (isDeepEqual (undefined, undefined)); ?
Tony Tai Nguyen
2

Untuk menguji apakah suatu variabel nol atau tidak terdefinisi, saya menggunakan kode di bawah ini.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }
DanKodi
sumber
Tutup tapi tidak. Kalah typeofdan bandingkan dengan undefinedlurus, bukan sebagai string. Ini berfungsi tetapi operator tambahan tidak memiliki efek selain menjadikannya lebih wordier.
temporary_user_name
Dalam hal ini ya Anda benar, kami tidak perlu menggunakan typeof. Tapi itu praktik yang baik untuk menggunakan typeof ketika Anda berurusan dengan variabel yang tidak ditentukan. Salah satu alasan untuk menggunakan typeof adalah bahwa itu tidak menimbulkan kesalahan jika variabel belum dideklarasikan.
DanKodi
Itu sebenarnya hal yang buruk. Anda tidak ingin variabel yang tidak dideklarasikan dalam kode Anda. Anda ingin itu melempar ReferenceError sehingga Anda dapat menemukan variabel dan mendeklarasikannya. Tentu saja Anda tidak akan mencobanya dalam bahasa yang dikompilasi seperti C ++! Hanya karena JS mengizinkannya, itu tidak berarti harus dilakukan.
temporary_user_name
1
Pernyataan Anda atau mundur. Memeriksa bahwa sesuatu tidak terdefinisi akan menjadi langkah pertama, bukan yang kedua.
Anthony Rutledge
2

Saya menjalankan tes ini di konsol Chrome. Menggunakan (void 0) Anda dapat memeriksa undefined:

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
suhail
sumber
2

Mari kita lihat ini,

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    Di atas, variabel hanya dinyatakan sebagai apple. Dalam hal ini, jika kita memanggil metode, alertitu akan menampilkan tidak terdefinisi.

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

Dalam yang kedua ini menampilkan nol, karena variabel applenilai adalah nol.

Jadi, Anda dapat memeriksa apakah suatu nilai tidak terdefinisi atau nol.

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}
Anjana Kumari
sumber
1

Cara terbaik:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}
Nishanth Matha
sumber
6
Solusi tepat ini sudah disediakan oleh @jkindwall pada 11 Oktober 2013. stackoverflow.com/a/19323555/2943403 Posting khusus kode ini sama sekali tidak berguna karena tidak menambah nilai baru pada halaman. Bahkan, itu menambah halaman mengasapi dan membuang waktu peneliti membacanya. Harap hapus jawaban ini.
mickmackusa
1
(null == undefined)  // true

(null === undefined) // false

Karena === memeriksa untuk jenis dan nilai. Jenis keduanya berbeda tetapi nilainya sama.

Franklin Pious
sumber
1
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}
KARTHIKEYAN.A
sumber
3
Apa yang terjadi jika pengguna memasukkan kata 'tidak terdefinisi'?
Chuck
Pertanyaan Anda bagus, itu menunjukkan kondisi yang benar sehingga kita perlu mengubah opsi normal menjadi kondisi typeof. @Chuck
KARTHIKEYAN.A
Ini salah. typeoftidak akan pernah menghasilkan undefined, hanya string 'undefined'. Selain itu, i == nullsudah benar jika iini undefined, sehingga boolean kedua akan berlebihan bahkan jika itu bekerja.
temporary_user_name
1
Solusi ini (dengan kondisi terbalik) sudah disediakan oleh @jkindwall pada 11 Oktober 2013. stackoverflow.com/a/19323555/2943403 Posting khusus kode ini sama sekali tidak berguna karena tidak menambah nilai baru pada halaman. Bahkan, itu menambah halaman mengasapi dan membuang waktu peneliti membacanya. Harap hapus jawaban ini.
mickmackusa
1

The foo == nullcek harus melakukan trik dan menyelesaikan "tidak terdefinisi OR null" kasus dengan cara yang terpendek. (Tidak mempertimbangkan "foo tidak dideklarasikan" kasus.) Tetapi orang-orang yang terbiasa memiliki 3 sama (sebagai praktik terbaik) mungkin tidak menerimanya. Lihat saja aturan eqeqeq atau triple-equals di eslint dan tslint ...

Pendekatan eksplisit, ketika kami memeriksa apakah suatu variabel adalah undefinedatau nullsecara terpisah, harus diterapkan dalam kasus ini, dan kontribusi saya pada topik (27 jawaban non-negatif untuk saat ini!) Adalah digunakan void 0sebagai cara pendek dan aman untuk melakukan pemeriksaan. untukundefined .

Penggunaan foo === undefinedtidak aman karena undefined bukan kata yang dilindungi undang-undang dan dapat dibayangi ( MDN ). Menggunakantypeof === 'undefined' cek itu aman, tetapi jika kita tidak akan peduli dengan kasus foo-is-tidak diumumkan pendekatan berikut dapat digunakan:

if (foo === void 0 || foo === null) { ... }
dhilt
sumber
1

jika Anda membuat fungsi untuk memeriksanya:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}
Ernesto
sumber
-1

Memanggil typeof null mengembalikan nilai "objek", karena nilai khusus null dianggap sebagai referensi objek kosong. Safari melalui versi 5 dan Chrome melalui versi 7 memiliki kekhasan di mana memanggil typeof pada ekspresi reguler mengembalikan "fungsi" sementara semua browser lain mengembalikan "objek".

Jones Agyemang
sumber
-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

Anda hanya dapat menggunakan yang kedua: karena akan memeriksa definisi dan deklarasi

keshav
sumber
-1

Saya masih berpikir cara terbaik / aman untuk menguji dua kondisi ini adalah dengan memberikan nilai ke string:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}
n1kkou
sumber
dapatkah Anda menjelaskan mengapa Anda yakin ini adalah "cara terbaik / aman" untuk melakukan tes?
sadmic microwave
Karena konversi selalu mengembalikan string "standar" (yaitu [objek Tidak Terdefinisi]), jadi Anda tidak mendapat masalah dengan menguji nilai-nilai palsu. Itu hanya pendapat saya berdasarkan pengalaman yang saya miliki dengan nilai-nilai kebenaran / kepalsuan.
n1kkou
Terima kasih untuk penjelasannya. Saya tidak mengkritik, ini jawaban yang menarik, saya hanya ingin Anda memberikan penjelasan untuk orang lain mengapa ini berpotensi lebih unggul daripada metode lain.
sadmic microwave
Jangan khawatir! Saya memiliki banyak masalah dengan jenis perbandingan ini, dan sampai sekarang, saya menganggapnya sebagai pendekatan yang paling berguna untuk masalah ini.
n1kkou
-2

Anda dapat memeriksa apakah nilainya tidak terdefinisi atau nol dengan hanya menggunakan typeof:

if(typeof value == 'undefined'){
Gideon
sumber
Lihat komentar pada jawaban sebelumnya ( stackoverflow.com/a/21273362/6305294 ) tentang typeof.
Alex
4
Ini salah. Tidak menangkap null. Saya tidak mengerti mengapa jawaban baru dan salah diberikan pada pertanyaan yang diberikan jawaban yang benar dan lengkap bertahun-tahun yang lalu. Apakah Anda merasa jawaban saat ini entah bagaimana tidak cukup?
temporary_user_name
-4

if(x==null)adalah ide yang buruk dalam JavaScript. Menilai dengan "=="- itu dapat menyebabkan paksaan tipe yang tidak terduga, dan itu tidak dapat dibaca oleh CoffeeScript, tidak pernah menggunakan "==" atau "! =" Dalam penilaian kondisi!

if(x)akan lebih baik, tapi hati-hati dengan 0 dan "" . Itu akan diperlakukan sebagai salah , bukan metode yang sama dengan "!= null"itu benar .

Masukkan deskripsi gambar di sini

Lihat JavaScript Praktik Terbaik .

Albert
sumber
3
Ini sama sekali tidak benar, dan studi sepintas tentang kerangka atau perangkat lunak tingkat profesional akan membuktikannya dalam beberapa saat. Menggunakan ==untuk membandingkan untuk nulladalah dengan cara standar penangkapan nulldan undefineddi JS. Jenis paksaan dengan ==bukan risiko dalam konteks khusus ini, dan pada kenyataannya dimanfaatkan untuk mencapai tujuan menangkap keduanya nulldan undefinedsecara bersamaan. Silakan menghabiskan lebih banyak waktu bekerja dengan bahasa sebelum memilih untuk menawarkan jawaban yang salah dan menyesatkan untuk pertanyaan yang diselesaikan dengan baik tahun lalu.
temporary_user_name
hindari "==". Semuanya selalu berubah, saya tidak setuju dengan Anda @Aerovistae
Albert.Qing
3
Anda tidak setuju dengan saya - Anda tidak setuju dengan seluruh pendirian JavaScript. Mari kita perjelas.
temporary_user_name