1. Fungsi:
Operator TypeOF mengembalikan string yang mewakili tipe data dari ekspresi.
Kemungkinan string adalah: "angka", "string", "boolean", "objek", "fungsi" dan "tidak ditentukan".
2. Deskripsi nilai pengembalian yang biasa digunakan
| ekspresi | Nilai pengembalian |
| tipe tidak terdefinisi | 'belum diartikan' |
| tipe null | 'obyek' |
| tipe true | 'boolean' |
| Tipeof 123 | 'nomor' |
| tipe "ABC" | 'rangkaian' |
| typeof function () {} | 'fungsi' |
| typeof {} | 'obyek' |
| Tipeof [] | 'obyek' |
| Jenis yang tidak diketahui | 'belum diartikan' |
Catatan: Nilai pengembalian jenisnya adalah semua string, dan semuanya adalah header kecil.
3. Aplikasi reguler:
1). Periksa apakah ada variabel dan memiliki nilai.
Tipeof akan mengembalikan "tidak terdefinisi" dalam dua kasus: ketika suatu variabel tidak dinyatakan, dan ketika nilai suatu variabel tidak ditentukan. Misalnya:
> Tipeof UndeclaredVariable === "tidak terdefinisi" true
> var DecledVariable;
> Typeof DecledVariable 'tidak terdefinisi'
> tipe 'tidak terdefinisi' yang tidak terdefinisi
Ada cara lain untuk mendeteksi apakah nilai tidak ditentukan:
> var value = tidak terdefinisi;
> value === True yang tidak ditentukan
Namun, jika metode ini digunakan pada variabel yang tidak dideklarasikan, pengecualian akan dilemparkan, karena hanya tipeof yang dapat mendeteksi variabel yang tidak diumumkan secara normal tanpa melaporkan kesalahan:
> UndeclaredVariable === Referensi yang tidak ditentukan: UndeclaredVariable tidak didefinisikan
Catatan: Variabel yang tidak diinisialisasi, parameter formal yang tidak dilewatkan dalam parameter, dan sifat yang tidak ada tidak akan memiliki masalah di atas, karena mereka selalu dapat diakses dan nilainya selalu tidak terdefinisi:
> var DecledVariable;
> DecledVariable === Benar Tidak Ditentukan
> (function (x) {return x === tidak terdefinisi} ()) true
> ({}). foo === True yang tidak ditentukan
Catatan: Oleh karena itu, if (window.maybeundeclaredvariable) {}
Pertanyaan: Tipeof tampaknya rumit saat menyelesaikan tugas -tugas tersebut.
Solusi: Operasi semacam ini tidak terlalu umum, jadi beberapa orang berpikir tidak perlu menemukan solusi yang lebih baik. Namun, seseorang dapat mengusulkan operator khusus:
> Defined UndeclaredVariable False
> var DecledVariable;
> Didefined DecledVariable False
Atau mungkin seseorang membutuhkan operator yang mendeteksi apakah suatu variabel dinyatakan:
> dinyatakan salah
> var DecledVariable;
> dinyatakan dinyatakan benar
Catatan Penerjemah: Di Perl, operator yang ditentukan di atas setara dengan yang ditentukan (), dan operator yang dinyatakan di atas setara dengan ada (),
2. Tentukan bahwa nilai tidak sama dengan yang tidak ditentukan dan tidak sama dengan nol
PERTANYAAN: Jika Anda ingin mendeteksi apakah nilai telah ditentukan (nilainya tidak terdefinisi atau nol), maka Anda telah menemukan manifestasi aneh tipeof (yang dianggap sebagai bug): TypeOf NULL Mengembalikan "objek":
> tipe null 'objek'
Catatan: Ini hanya dapat dikatakan sebagai bug dalam implementasi JavaScript asli, dan standar sekarang distandarisasi. V8 pernah mengoreksi dan mengimplementasikan tipe null === "null", tetapi akhirnya terbukti tidak layak. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
Solusi: Jangan gunakan TypeOf untuk melakukan tugas ini, gunakan metode berikut sebagai gantinya: Namun, variabel X harus dinyatakan sebelumnya, jika tidak kesalahan akan dilaporkan.
fungsi isDefined (x) {return x! == null && x! == tidak terdefinisi; }
Kemungkinan lain adalah memperkenalkan "operator nilai default". Jika myValue tidak ditentukan, ekspresi berikut akan mengembalikan nilai default:
myValue || DefaultValue
Ekspresi di atas setara dengan:
(myValue! == tidak terdefinisi && myValue! == null)? MyValue: DefaultValue
Faktanya, ini adalah penyederhanaan dari pernyataan berikut:
myValue = myValue || DefaultValue
3. Bedakan antara nilai objek dan nilai asli
Fungsi berikut digunakan untuk mendeteksi apakah x adalah nilai objek:
function isObject (x) {return (typeof x === "fungsi" || (typeof x === "objek" && x! == null)); }
Masalah: Deteksi di atas lebih rumit karena tipe memperlakukan fungsi dan objek sebagai jenis yang berbeda, dan tipe null mengembalikan "objek".
Solusi: Metode berikut juga sering digunakan untuk mendeteksi nilai objek:
fungsi isObject2 (x) {return x === objek (x); }
PERINGATAN: Anda mungkin berpikir bahwa objek instance dapat digunakan untuk mendeteksinya di sini, tetapi instance dari digunakan untuk menilai hubungan instance dengan menggunakan prototipe menggunakan objek. Jadi apa yang harus saya lakukan jika suatu objek tanpa prototipe:
> var obj = object.create (null);
> Object.getPrototypeof (OBJ) NULL
OBJ memang objek, tetapi itu bukan contoh dari nilai apa pun:
> tipe obj 'objek'
> obj instance dari objek false
Dalam praktiknya, Anda mungkin jarang menemukan objek seperti itu, tetapi memang ada dan memiliki tujuannya.
Catatan Penerjemah: Object.Prototype adalah objek yang ada secara default dan tidak memiliki prototipe.
> Object.getPrototypeOf (Object.Prototype) NULL
> Typeof Object.prototype 'Object'
> Objek.prototype instance dari objek false
4. Apa jenis nilai aslinya?
TipeOf adalah cara terbaik untuk melihat jenis nilai asli tertentu.
> typeof "ABC" 'String'
> tipe 'tidak terdefinisi' yang tidak terdefinisi
Pertanyaan: Anda harus tahu perilaku aneh tipe null.
> Typeof NULL // Hati -hati! 'obyek'
Solusi: Fungsi berikut dapat memperbaiki masalah ini (hanya untuk kasus penggunaan ini).
fungsi getprimitivetypeName (x) {
var typename = typeof x;
switch (typename) {
kasus "tidak terdefinisi": case "boolean": case "number": case "string": return typename;
case "objek": if (x === null) {return "null"; }
default: // penilaian sebelumnya gagal lulus melempar typeError baru ("Parameter bukan nilai primitif:"+x);
}}
Solusi yang lebih baik: Menerapkan fungsi getTypeName (), yang tidak hanya dapat mengembalikan jenis nilai asli, tetapi juga mengembalikan atribut internal [[kelas]] dari nilai objek. Di sini kita berbicara tentang cara mengimplementasikan fungsi ini (catatan penerjemah: $ .tipe di jQuery adalah implementasi seperti ini)
5. Apakah nilai adalah fungsi
Tipeof dapat digunakan untuk mendeteksi apakah nilai adalah suatu fungsi.
> typeof function () {} 'fungsi'
> typeof object.prototype.tostring 'fungsi'
Pada prinsipnya, fungsi instance juga dapat melakukan deteksi persyaratan semacam ini. Sekilas, tampaknya tulisannya lebih elegan. Namun, browser memiliki kekhasan: setiap kerangka kerja dan jendela memiliki variabel globalnya sendiri. Oleh karena itu, jika Anda meneruskan suatu objek dalam kerangka kerja tertentu ke dalam kerangka kerja lain, instanceof tidak berfungsi dengan baik karena kedua kerangka kerja memiliki konstruktor yang berbeda. Inilah sebabnya mengapa ada metode array.isArray () di ecmascript5. Alangkah baiknya jika ada metode yang melintasi kerangka kerja untuk memeriksa apakah suatu objek adalah instance dari konstruktor yang diberikan. GetTypeName di atas () adalah solusi, tapi mungkin ada solusi yang lebih mendasar.
6. Ikhtisar
Yang disebutkan berikut harus menjadi kebutuhan yang paling mendesak di JavaScript saat ini, dan dapat menggantikan beberapa fitur fungsional dari tanggung jawab tipef saat ini:
isDefined () (seperti objek.isdefined ()): dapat digunakan sebagai fungsi atau operator
isObject ()
gettypeName ()
Mekanisme yang dapat mendeteksi apakah suatu objek adalah instance dari konstruktor tertentu di seluruh kerangka kerja
Untuk memeriksa apakah suatu variabel telah dinyatakan untuk persyaratan seperti itu, mungkin tidak perlu memiliki operator sendiri.
Ringkasan di atas dari penggunaan tipe di JS adalah seluruh konten yang dibagikan oleh editor. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.