Kode saya adalah
function getID( swfID ){
if(navigator.appName.indexOf("Microsoft") != -1){
me = window[swfID];
}else{
me = document[swfID];
}
}
function js_to_as( str ){
me.onChange(str);
}
Namun, terkadang saya onChange
tidak memuat. Kesalahan pembakar dengan
me.onChange bukan fungsi
Saya ingin menurunkan anggun karena ini bukan fitur yang paling penting dalam program saya. typeof
memberikan kesalahan yang sama.
Adakah saran tentang cara memastikan bahwa itu ada dan kemudian hanya dijalankan onChange
?
(Tidak ada metode di bawah ini kecuali mencoba menangkap satu pekerjaan)
javascript
Alec Smart
sumber
sumber
Jawaban:
Coba sesuatu seperti ini:
atau lebih baik lagi (sesuai komentar UpVotes UpTheCreek)
sumber
undefined
pengecualian dalam JavaScript. Saya mencobanya.typeof window.alert === 'object'
.if (me.onChange) { // do something }
?me.onChange
bisa berupa apa saja yang dievaluasitrue
, belum tentu fungsi (misalnya bisa berupa boolean, string, dll). Sebagai contoh, lihat jsfiddle.net/j5KAF/1Saya punya masalah ini.
terus melempar kesalahan referensi jika obj tidak ditentukan.
Pada akhirnya saya melakukan yang berikut:
Seorang kolega menunjukkan kepada saya bahwa memeriksa apakah itu
!== 'undefined'
dan kemudian=== 'function'
tentu saja berlebihan.Lebih sederhana:
Jauh lebih bersih dan berfungsi dengan baik.
sumber
ReferenceError
? Bagi saya itu tidak masuk akal.ReferenceError
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Jika Anda menggunakan eval untuk mengkonversi string ke fungsi, dan Anda ingin memeriksa apakah metode eval ini ada, Anda akan ingin menggunakan typeof dan string fungsi Anda di dalam eval :
Jangan membalikkan ini dan mencoba typeof pada eval . Jika Anda melakukan ReferenceError akan dilemparkan:
sumber
var a = 'alert'; window[a]('it works');
Bagaimana tentang:
misalnya
atau untuk kasus Anda:
Lihat dokumen MDN .
sumber
lastIndexOf()
dalam string (kita tahu, itu, tetapi secara teoritis)typeof String().lastIndexOf === "function"
itu benar, tetapi'lastIndexOf' in String
itu salah.Coba
typeof
- Cari untuk'undefined'
mengatakan itu tidak ada,'function'
untuk suatu fungsi. JSFiddle untuk kode iniAtau jika:
Atau dengan nilai balik, pada satu baris:
sumber
Tidak melihat ini yang disarankan: me.onChange && me.onChange (str);
Pada dasarnya jika me.onChange tidak terdefinisi (yang akan terjadi jika belum dimulai) maka ia tidak akan menjalankan bagian terakhir. Jika me.onChange adalah suatu fungsi, ia akan menjalankan me.onChange (str).
Anda bahkan dapat melangkah lebih jauh dan melakukan:
dalam kasus saya async juga.
sumber
sumber
&&
mengurus sesuatu yang tidak dimiliki jQueryisFunction
di sisi kanan&&
?Bagi saya cara termudah:
sumber
if ((typeof window["function_name"] !== 'undefined') && ((typeof window["function_name"] === 'function'))) { return true; } else { return false; }
tetapi ini adalah penyesuaian kecilSaya akan melangkah 1 langkah lebih jauh untuk memastikan properti itu memang berfungsi
sumber
sumber
Saya suka menggunakan metode ini:
Pemakaian:
sumber
Pustaka Underscore.js mendefinisikannya dalam metode isFunction karena ini (yang komentar sarankan dapat memenuhi beberapa bug browser)
http://underscorejs.org/docs/underscore.html#section-143
sumber
ATAU
sumber
Beri tanda seru ganda yaitu !! sebelum nama fungsi yang ingin Anda periksa. Jika ada, itu akan mengembalikan true.
sumber
Dalam beberapa kata: tangkap pengecualian.
Saya benar-benar terkejut tidak ada yang menjawab atau berkomentar tentang Pengecualian Menangkap di posting ini.
Detail: Ini dia contoh dimana saya mencoba untuk mencocokkan fungsi yang diawali oleh mask_ dan diakhiri dengan form isian "name". Ketika JavaScript tidak menemukan fungsinya, ia harus melempar ReferenceError yang dapat Anda tangani sesuai keinginan di bagian tangkapan.
sumber
Tanpa syarat
sumber
Saya menduga bahwa
me
tidak mendapatkan ditugaskan dengan benar onload.Memindahkan panggilan get_ID ke acara onclick harus menanganinya.
Jelas Anda dapat menjebak lebih lanjut seperti yang disebutkan sebelumnya:
sumber
Saya selalu cek seperti ini:
letakkan saja sebelum kode apa pun yang menggunakan fungsi ini
sumber
Saya memiliki kasus di mana nama fungsi bervariasi sesuai dengan variabel (var 'x' dalam kasus ini) ditambahkan ke nama fungsi. Ini bekerja:
sumber
Kode jQuery sederhana ini harus melakukan trik:
sumber
Saya sudah mencoba jawaban yang diterima; namun:
mengembalikan 'tidak terdefinisi'. Saya perhatikan bahwa spesifikasi menyatakan peristiwa yang disebut 'onchange' alih-alih 'onChange' (perhatikan camelCase).
Mengubah jawaban asli yang diterima menjadi yang berikut ini berfungsi untuk saya:
sumber
Jika Anda memeriksa fungsi yang merupakan plugin jQuery, Anda perlu menggunakan $ .fn.myfunction
sumber
Saya juga telah mencari solusi elegan untuk masalah ini. Setelah banyak refleksi, saya menemukan pendekatan ini yang terbaik.
const func = me.onChange || (str => {}); func(str)
;sumber
(me.onChange||(_=>_))()
Akan menjalankan fungsi jika ada, jika tidak akan melakukan apa-apa.me.onChange && me.onChange()
untuk mencegah mendefinisikan fungsi void.Javascript Modern ke Penyelamatan!
Ini mungkin tidak memiliki peluang besar untuk dilihat dengan daftar jawaban yang panjang, tetapi ini sekarang dipecahkan * di tingkat bahasa dengan sintaks Chaining Opsional baru
Sesederhana itu -
onChange
hanya dipanggil jika ada .Jika
onChange
tidak ada, tidak ada yang terjadi, dan ekspresi kembaliundefined
- jadi jika itu memiliki nilai balik yang jika tidak Anda gunakan, Anda dapat memeriksa nilai ini!== undefined
sebelum melanjutkan.Peringatan tepi kasus - jika
onChange
memang ada tetapi bukan suatu fungsi, Anda mendapatkanTypeError
. Ini seperti yang Anda harapkan, itu sama dengan mencoba memanggil non-fungsi sebagai fungsi, tetapi layak untuk menunjukkan secara eksplisit bahwa Opsional Chaining tidak melakukan sihir apa pun untuk membuat ini hilang.* Ya, secara teknis Chaining Opsional masih merupakan proposal TC39 tahap 4 jadi belum dalam spesifikasi ECMAScript, tetapi tahap 4 berarti sudah selesai dan penyertaannya pada dasarnya dijamin, hanya menunggu versi baru untuk dikirimkan. Anda dapat menggunakan sintaks dalam versi finalnya hari ini melalui Babel dengan keyakinan itu tidak akan berubah. Itu bahkan dalam naskah!
sumber
Berikut adalah solusi yang berfungsi dan sederhana untuk memeriksa keberadaan suatu fungsi dan memicu fungsi tersebut secara dinamis oleh fungsi lain;
Fungsi pemicu
dan sekarang Anda dapat menghasilkan fungsi secara dinamis mungkin menggunakan php seperti ini
sekarang Anda dapat memanggil fungsi menggunakan acara yang dihasilkan secara dinamis
kode HTML persis yang Anda butuhkan adalah
sumber
sumber
Dan kemudian ada ini ...
sumber
Coba yang ini:
Perlu diketahui bahwa saya telah menulis ini dengan ponsel saya. Mungkin berisi beberapa masalah huruf besar dan / atau koreksi lain yang diperlukan seperti misalnya nama fungsi
Jika Anda ingin fungsi seperti PHP memeriksa apakah var diatur:
sumber
Untuk mengilustrasikan jawaban sebelumnya, berikut cuplikan JSFiddle cepat:
sumber
sumber