Pertanyaan JavaScript periksa apakah ada variabel (didefinisikan / diinisialisasi)


Metode pengecekan apakah variabel yang telah diinisialisasi lebih baik / benar? (Dengan asumsi variabel bisa menampung apa saja (string, int, objek, fungsi, dll.))

if (elem) { // or !elem

atau

if (typeof(elem) !== 'undefined') {

atau

if (elem != null) {

1281
2018-02-25 03:44


asal


Jawaban:


Kamu ingin itu typeof operator. Secara khusus:

if (typeof variable !== 'undefined') {
    // the variable is defined
}

2502
2018-02-06 04:56



Itu typeof operator akan memeriksa apakah variabel benar-benar tidak terdefinisi.

if (typeof variable === 'undefined') {
    // variable is undefined
}

Itu typeof operator, tidak seperti operator lain, tidak melempar a ReferenceError pengecualian bila digunakan dengan variabel yang tidak dideklarasikan.

Namun, perhatikan itu typeof null akan kembali "object". Kita harus berhati-hati untuk menghindari kesalahan dengan menginisialisasi variabel ke null. Supaya aman, inilah yang bisa kami gunakan sebagai gantinya:

if (typeof variable === 'undefined' || variable === null) {
    // variable is undefined or null
}

Untuk info lebih lanjut tentang penggunaan perbandingan ketat === bukan persamaan sederhana ==, Lihat:
Operator yang sama (== vs ===) harus digunakan dalam perbandingan JavaScript?


691
2018-06-28 16:00



Dalam JavaScript, variabel dapat didefinisikan, tetapi tahan nilainya undefined, jadi jawaban yang paling umum tidak benar secara teknis, dan sebagai gantinya melakukan yang berikut:

if (typeof v === "undefined") {
   // no variable "v" is defined in the current scope
   // *or* some variable v exists and has been assigned the value undefined
} else {
   // some variable (global or local) "v" is defined in the current scope
   // *and* it contains a value other than undefined
}

Itu mungkin cukup untuk tujuan Anda. Tes berikut ini memiliki semantik yang lebih sederhana, yang membuatnya lebih mudah untuk secara tepat menggambarkan perilaku kode Anda dan memahaminya sendiri (jika Anda peduli tentang hal-hal seperti itu):

if ("v" in window) {
   // global variable v is defined
} else {
   // global variable v is not defined
}

Ini, tentu saja, mengasumsikan Anda menjalankan browser (di mana window adalah nama untuk objek global). Namun jika Anda mondar-mandir dengan globals seperti ini Anda mungkin berada di browser. Secara subyektif, menggunakan 'name' in window secara gaya konsisten dengan menggunakan window.name untuk merujuk ke global. Mengakses global sebagai properti window daripada sebagai variabel memungkinkan Anda untuk meminimalkan jumlah variabel tidak diumumkan yang Anda rujuk dalam kode Anda (untuk keuntungan linting), dan menghindari kemungkinan bayangan global Anda oleh variabel lokal. Juga, jika global membuat kulit Anda merangkak Anda mungkin merasa lebih nyaman menyentuh mereka hanya dengan tongkat yang relatif panjang ini.


182
2017-10-22 15:47



Dalam sebagian besar kasus, Anda akan menggunakan:

elem != null

Tidak seperti yang sederhana if (elem), itu memungkinkan 0, false, NaN dan '', tetapi menolak null atau undefined, menjadikannya tes umum yang baik untuk kehadiran argumen, atau properti dari suatu objek.


Cek lain tidak salah, mereka hanya memiliki kegunaan yang berbeda:

  • if (elem): dapat digunakan jika elem dijamin menjadi objek, atau jika false, 0, dll. dianggap sebagai nilai "default" (karenanya setara dengan undefined atau null).

  • typeof elem == 'undefined' dapat digunakan dalam kasus-kasus di mana yang ditentukan null memiliki arti yang berbeda terhadap variabel atau properti yang tidak diinisialisasi.

    • Ini adalah satu-satunya pemeriksaan itu tidak akan menimbulkan kesalahan jika elem tidak dideklarasikan (yaitu tidak var pernyataan, bukan milik window, atau bukan argumen fungsi). Ini, menurut pendapat saya, agak berbahaya karena memungkinkan salah ketik tanpa disadari. Untuk menghindari ini, lihat metode di bawah ini.

Juga bermanfaat adalah perbandingan ketat terhadap undefined:

if (elem === undefined) ...

Namun, karena global undefineddapat ditimpa dengan nilai lain, yang terbaik adalah mendeklarasikan variabel undefined dalam lingkup saat ini sebelum menggunakannya:

var undefined; // really undefined
if (elem === undefined) ...

Atau:

(function (undefined) {
    if (elem === undefined) ...
})();

Keuntungan sekunder dari metode ini adalah bahwa JS minifiers dapat mengurangi undefined variabel ke satu karakter, menghemat beberapa byte setiap kali.


112
2018-02-25 03:48



Dalam banyak kasus, menggunakan:

if (elem) { // or !elem

akan melakukan pekerjaan untuk Anda! ... ini akan memeriksa kasus-kasus di bawah ini:

  1. tidak terdefinisi: jika nilai tidak ditentukan dan itu undefined
  2. batal: jika tidak, misalnya, jika elemen DOM tidak ada ...
  3. string kosong: '' 
  4. 0: angka nol
  5. NaN: bukan angka
  6. Salah

Jadi ini akan menutup semua jenis kasus, tetapi selalu ada kasus aneh yang ingin kita bahas juga, misalnya, string dengan spasi, seperti ini ' ' satu, ini akan didefinisikan dalam javascript karena memiliki spasi di dalam string ... misalnya dalam hal ini Anda menambahkan satu lagi cek menggunakan trim (), seperti:

if(elem) {

if(typeof elem === 'string' && elem.trim()) {
///

Juga, pemeriksaan ini untuk nilai-nilai hanya, karena objek dan array bekerja secara berbeda dalam Javascript, array kosong [] dan benda kosong {} selalu benar.

Saya membuat gambar di bawah ini untuk menunjukkan jawaban singkat dari jawaban:

undefined, null, etc


80
2017-09-01 06:15



Bagaimana cara memeriksa apakah ada variabel

Ini adalah solusi antipeluru yang cukup untuk menguji apakah ada variabel dan telah diinisialisasi:

var setOrNot = typeof variable !== typeof undefined;

Ini paling sering digunakan dalam kombinasi dengan operator terner untuk menetapkan default jika variabel tertentu belum diinisialisasi:

var dark = typeof darkColor !== typeof undefined ? darkColor : "black";

Masalah dengan enkapsulasi

Sayangnya, Anda tidak bisa hanya merangkum cek Anda dalam suatu fungsi.

Anda mungkin berpikir untuk melakukan sesuatu seperti ini:

function isset(variable) {
    return typeof variable !== typeof undefined;
}

Namun, ini akan menghasilkan kesalahan referensi jika Anda memanggil misalnya. isset(foo) dan variabel foo belum ditentukan, karena Anda tidak dapat meneruskan variabel yang tidak ada ke fungsi:

Tidak Tercatat Referensi Runtunan: foo tidak didefinisikan


Menguji apakah parameter fungsi tidak terdefinisi

Sementara kami isset fungsi tidak dapat digunakan untuk menguji apakah suatu variabel ada atau tidak (untuk alasan yang dijelaskan di atas), itu memungkinkan kita untuk menguji apakah parameter suatu fungsi tidak terdefinisi:

var a = '5';

var test = function(x, y) {
    console.log(isset(x));
    console.log(isset(y));
};

test(a);

// OUTPUT :
// ------------
// TRUE
// FALSE

Meskipun tidak ada nilainya y diteruskan berfungsi test, kami isset berfungsi dengan sempurna dalam konteks ini, karena y dikenal dalam fungsi test sebagai undefined nilai.


59
2018-02-19 11:54



Periksa apakah ada objek hasOwnProperty()

Sebuah alternatif untuk kebanyakan typeof jawaban, adalah penggunaan hasOwnProperty() yang tentu saja memeriksa apakah suatu objek (cukup banyak segala sesuatu di JS) memiliki properti yaitu variabel (antara lain).

Itu hasOwnProperty() metode mengembalikan boolean yang menunjukkan apakah objek memiliki properti yang ditentukan sebagai milik sendiri (tidak diwariskan) properti.

Setiap objek diturunkan Obyek mewarisi hasOwnProperty() metode. Metode ini dapat digunakan untuk menentukan apakah suatu objek memiliki properti yang ditentukan sebagai properti langsung dari objek itu; tidak seperti di operator, metode ini tidak memeriksa rantai prototipe objek.

// Globally established (therefore) properties of window
var foo = "whatever", // string
    bar = false,      // bool
    baz;              // undefined
// window.qux does not exist

console.log( [
    window.hasOwnProperty( "foo" ),             // true
    window.hasOwnProperty( "bar" ),             // true
    window.hasOwnProperty( "baz" ),             // true
    window.hasOwnProperty( "qux" ),             // false
    { foo: [], bar: 0 }.hasOwnProperty( "bar" ) // true
] );

Apa yang hebat tentangnya hasOwnProperty() adalah bahwa dalam menyebutnya, kita tidak menggunakan variabel yang mungkin belum terdefinisi - yang tentu saja adalah setengah masalah di tempat pertama.

Meski tidak selalu itu sempurna atau ideal solusi, dalam keadaan tertentu, itu hanya pekerjaan!


42
2018-05-02 14:07



Ada cara lain untuk memeriksa ini, ketika Anda melakukan tugas sederhana dan pemeriksaan terkait. Cukup gunakan Operator Bersyarat (Ternary).

var values = typeof variable !== 'undefined' ? variable : '';

Ini juga akan membantu, ketika Anda mencoba mendeklarasikan variabel Global dengan contoh penugasan dari variabel referensi.

Jika Anda ingin memeriksa variabel tidak seharusnya undefined atau null. Kemudian lakukan di bawah ini.

Ketika variabel dideklarasikan, dan jika Anda ingin memeriksa nilainya, ini bahkan Sederhana:  dan itu akan tampil undefined dan null periksa bersama.

var values = variable ? variable : '';

38
2018-02-19 05:26



tidak terdefinisi, boolean, string, angka, fungsi

if (typeof foo! == 'undefined') {

}

Objek, Array

if( foo instanceof Array ) { 

}

27
2017-07-26 02:08