Periksa apakah objek ada di JavaScript

313

Bagaimana cara memverifikasi keberadaan objek dalam JavaScript?

Karya-karya berikut:

if (!null)
   alert("GOT HERE");

Tapi ini melempar Kesalahan:

if (!maybeObject)
   alert("GOT HERE");

Kesalahan:

maybeObject tak terdefinisi.

Yarin
sumber

Jawaban:

578

Anda dapat menggunakan typeofoperator dengan aman pada variabel yang tidak ditentukan.

Jika telah ditetapkan nilai apa pun, termasuk nol, typeof akan mengembalikan sesuatu selain yang tidak ditentukan. typeof selalu mengembalikan string.

Karena itu

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}
JAL
sumber
73
jika selalu berupa string, Anda benar-benar bisa (harus) melakukan !==perbandingan.
Mikha
9
Karena ini adalah fitur inti Javascript, sangat disayangkan bahwa tidak ada built-in yang lebih baik dan lebih rentan kesalahan. Perbandingan string mencegah kompilator dari 100% memberi tahu kami ketika kami melakukan kesalahan kecil (seperti salah ketik) dalam jenis pemeriksaan ini.
Domi
dalam kasus saya, saya mencari untuk MENCARI objek ini, jadi ini tidak membantu. saya ingin solusi saya dapat digunakan dalam konsol sebagai wel, untuk melihat apakah objek di suatu tempat domtree tanpa clickery setiap ..
blamb
@TJCrowder Contoh-contoh itu sepertinya tidak dapat diakses lagi.
Stefan van den Akker
1
@StefanvandenAkker: Tautan ke contoh buruk harus jsbin.com/ibeho3/1 . Contoh yang bagus baik-baik saja: jsbin.com/ibeho3/2 . (Sedihnya JSBin mengalihkan ke yang terbaru, dan orang-orang telah menyunting itu dalam satu inci dari hidupnya.)
TJ Crowder
48

Ada banyak kebenaran di sini, jadi saya pikir saya membuat beberapa hal lebih jelas.

Sebenarnya Anda tidak dapat mengetahui secara akurat apakah ada variabel (kecuali jika Anda ingin membungkus setiap baris kedua menjadi blok coba-tangkap).

Alasannya adalah Javascript memiliki nilai terkenal undefinedyang sangat tidak berarti bahwa variabel tidak didefinisikan, atau tidak adaundefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

Jadi, baik variabel yang ada maupun variabel lain yang tidak dapat melaporkan undefined jenisnya kepada Anda .

Adapun kesalahpahaman @Vinvin null == undefined,. Ini disebabkan oleh tipe paksaan, dan itulah alasan utama mengapa Crockford terus memberi tahu semua orang yang tidak yakin dengan hal semacam ini untuk selalu menggunakan operator kesetaraan yang ketat ===untuk menguji kemungkinan nilai-nilai palsu. null !== undefinedmemberi Anda apa yang Anda harapkan. Harap perhatikan juga, itu foo != nullbisa menjadi cara yang efektif untuk memeriksa apakah suatu variabel tidak undefinedatau tidak null. Tentu saja Anda bisa eksplisit, karena dapat membantu keterbacaan.

Jika Anda membatasi pertanyaan untuk memeriksa apakah suatu objek ada, typeof o == "object"mungkin ide yang bagus, kecuali jika Anda tidak mempertimbangkan objek array, karena ini juga akan dilaporkan sebagai jenis objectyang dapat membuat Anda sedikit bingung. Belum lagi itu typeof nulljuga akan memberi Anda objectyang hanya salah.

Daerah primal mana Anda benar-benar harus berhati-hati typeof, undefined, null, unknowndan misteries lainnya adalah tuan rumah benda. Mereka tidak bisa dipercaya. Mereka bebas melakukan hampir semua hal kotor yang mereka inginkan. Jadi berhati-hatilah dengan mereka, periksa fungsionalitas jika Anda bisa, karena itu satu-satunya cara aman untuk menggunakan fitur yang bahkan mungkin tidak ada.

gblazex
sumber
5
Cukup melakukan foo!=nullakan menghasilkan ReferenceError jika footidak didefinisikan. Dengan demikian, lebih baik digunakan typeof, kecuali Anda berencana menangkap pengecualian.
JAL
1
Saya menuliskannya untuk Anda lagi: undefined !== not defined&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null' . Saya tidak mengatakan != nullitu baik untuk memeriksa apakah itu ada. Anda mengambilnya di luar konteks. (Saya juga menyebutkan bahwa itu adalah sidenote, tidak terkait langsung dengan masalah pertanyaan OP)
gblazex
2
Anda lagi membingungkan istilah yang tidak didefinisikan dengan tipe undefined. Mereka tidak sama. (note) it can be used !== you should use. Gunakan akal sehat saat membaca. Ketika variabel dideklarasikan (daftar parameter, atau di tempat lain) dan Anda ingin memeriksa apakah itu mendapat nilai, !=null benar-benar aman. Itu adalah usecase yang berbeda dari yang diminta OP, itu sebabnya saya memasukkannya sebagai catatan. Seluruh paragraf adalah tentang posting @ Kevin dan ketik paksaan btw. Seperti yang dapat Anda perhatikan jika Anda membaca dengan seksama.
gblazex
@ JAL Anda melewatkan bagian yang Anda tidak berisiko menggunakan kesalahan != nullketika Anda tahu bahwa variabel telah dideklarasikan. Ini sangat berguna untuk memeriksa argumen fungsi, pertimbangkan:var hasValue = function(foo) {return foo != null}
tybro0103
@ tybro0103 itu benar, tetapi seluruh masalahnya adalah "Bagaimana cara memverifikasi keberadaan objek dalam JavaScript?". Jika Anda yakin itu sudah dinyatakan, itu adalah situasi yang berbeda.
JAL
12

Kamu bisa memakai:

if (typeof objectName == 'object') {
    //do something
}
Calvin
sumber
8

Dua arah.

typeof untuk variabel lokal

Anda dapat menguji untuk objek lokal menggunakan typeof:

if (typeof object !== "undefined") {}

jendela untuk variabel global

Anda dapat menguji untuk objek global (yang ditentukan pada cakupan global) dengan memeriksa objek jendela:

if (window.FormData) {}
superluminary
sumber
7

Jika itu objek global, Anda bisa menggunakannya if (!window.maybeObject)

Nikita Rybak
sumber
Saya menemukan window.hasOwnProperty('maybeObject')sedikit lebih mudah dibaca, jika itu adalah objek global
Nathaniel Rogers
5

Anda bisa menggunakan "typeof".

if(typeof maybeObject != "undefined")
    alert("GOT HERE");
RussellUresti
sumber
4

Utas dibuka beberapa waktu lalu. Saya pikir sementara itu penggunaan operator ternary adalah pilihan paling sederhana:

maybeObject ? console.log(maybeObject.id) : ""
Greg Holst
sumber
Ya, sesuatu di sepanjang garis var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;dan periksa jika tidak false.
Hmerman6006
3

Saya dulu hanya melakukan if(maybeObject)sebagai cek nol di javascripts saya.

if(maybeObject){
    alert("GOT HERE");
}

Jadi hanya jika maybeObject - adalah objek, peringatan akan ditampilkan. Saya punya contoh di situs saya.

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes

pengguna513365
sumber
Masalahnya adalah jika maybeObject tidak dideklarasikan itu akan melempar Kesalahan: mungkinObject tidak didefinisikan
Juanma Menendez
jika maybeObjectini 0, 0.0, or "", itu cek ke false
alejandrociatti
3

Saya baru saja menguji contoh typeOf dari atas dan tidak ada yang berhasil untuk saya, jadi saya malah menggunakan ini:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }

Facundo Colombier
sumber
1

Selain memeriksa keberadaan objek / variabel Anda mungkin ingin memberikan output "kasus terburuk" atau setidaknya menjebaknya menjadi peringatan sehingga tidak luput dari perhatian.

Contoh fungsi yang memeriksa, memberikan alternatif, dan menangkap kesalahan.

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

Saya membuat ini juga karena objek yang saya lewati dapat berupa x, xm, xm [z] dan typeof xm [z] akan gagal dengan kesalahan jika xm tidak ada.

Saya harap ini membantu. (BTW, saya pemula dengan JS)

Menggosok
sumber
1

bagi saya ini bekerja untuk objek-DOM:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}
dan-bri
sumber
1

Jika Anda hanya peduli tentang keberadaannya (sudah dinyatakan?), Jawaban yang disetujui sudah cukup:

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

Jika Anda peduli memiliki nilai aktual, Anda harus menambahkan:

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

Sebagai typeof( null ) == "object"

misalnya bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

dengan cara ini Anda memeriksa apakah tidak ada nullatau tidak undefined, dan karena typeoftidak kesalahan jika nilai tidak ada ditambah &&sirkuit pendek, Anda tidak akan pernah mendapatkan kesalahan run-time.

Secara pribadi, saya sarankan menambahkan helper fn di suatu tempat (dan jangan percaya typeof()):

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}
alejandrociatti
sumber
0
if (n === Object(n)) {
   // code
}
Leo Lanese
sumber
5
Meskipun blok kode ini dapat menjawab pertanyaan OP, jawaban ini akan jauh lebih berguna jika Anda menjelaskan bagaimana kode ini berbeda dari kode dalam pertanyaan, apa yang telah Anda ubah, mengapa Anda mengubahnya dan mengapa itu memecahkan masalah tanpa memperkenalkan orang lain.
Mifeet
-1
if (maybeObject !== undefined)
  alert("Got here!");
plunk2000
sumber
-1

atur nilai Textbox ke satu frame ke inline frame menggunakan panel tab align align tidak. Jadi pertama-tama, sebelum menetapkan nilai kita perlu memeriksa bingkai panel tab yang tersedia atau tidak menggunakan kode berikut:

Kode Javascript:

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>
Ram
sumber
-1

nol dan nol adalah petunjuk implisit. Jika Anda tidak melakukan aritmatika, membandingkan, atau mencetak '0' ke layar, Anda tidak perlu mengetiknya. Ini tersirat. Seperti dalam tersirat. Typeof juga tidak diperlukan untuk alasan yang sama. Menonton.

if (obj) console.log ("exist");

Saya tidak melihat permintaan untuk tidak atau ada untuk itu tidak termasuk sebagai. Saya suka konten tambahan yang tidak sesuai dengan pertanyaan. Mari kita tetap sederhana.

ireadgud
sumber
Saya melihat tidak dalam pertanyaan: if (!maybeObject)- tapi memang, judulnya meminta yang sebaliknya.
Armali
-4

Pikirkan itu paling mudah seperti ini

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");
noobtoo
sumber
-10

Atau, Anda semua dapat mulai menggunakan ekslusif saya () metode dan dapat melakukan hal-hal yang dianggap mustahil. yaitu:

Hal-hal seperti:, exists("blabla")atau bahkan: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")juga dimungkinkan ...

Bill the Lizard
sumber
4
Dan di mana metode itu?
v010dya