Jawaban:
Anda dapat menggunakan typeof
operator 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");
}
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 undefined
yang 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 !== undefined
memberi Anda apa yang Anda harapkan. Harap perhatikan juga, itu foo != null
bisa menjadi cara yang efektif untuk memeriksa apakah suatu variabel tidak undefined
atau 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 object
yang dapat membuat Anda sedikit bingung. Belum lagi itu typeof null
juga akan memberi Anda object
yang hanya salah.
Daerah primal mana Anda benar-benar harus berhati-hati typeof
, undefined
, null
, unknown
dan 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.
foo!=null
akan menghasilkan ReferenceError jika foo
tidak didefinisikan. Dengan demikian, lebih baik digunakan typeof
, kecuali Anda berencana menangkap pengecualian.
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Saya tidak mengatakan != null
itu 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)
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.
!= null
ketika Anda tahu bahwa variabel telah dideklarasikan. Ini sangat berguna untuk memeriksa argumen fungsi, pertimbangkan:var hasValue = function(foo) {return foo != null}
Dua arah.
Anda dapat menguji untuk objek lokal menggunakan typeof:
if (typeof object !== "undefined") {}
Anda dapat menguji untuk objek global (yang ditentukan pada cakupan global) dengan memeriksa objek jendela:
if (window.FormData) {}
Jika itu objek global, Anda bisa menggunakannya if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
sedikit lebih mudah dibaca, jika itu adalah objek global
Anda bisa menggunakan "typeof".
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Utas dibuka beberapa waktu lalu. Saya pikir sementara itu penggunaan operator ternary adalah pilihan paling sederhana:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
dan periksa jika tidak false
.
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
maybeObject
ini 0, 0.0, or ""
, itu cek ke false
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!");
}
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)
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 null
atau tidak undefined
, dan karena typeof
tidak 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!");
}
if (n === Object(n)) {
// code
}
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>
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.
if (!maybeObject)
- tapi memang, judulnya meminta yang sebaliknya.
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 ...
!==
perbandingan.