Dalam proses menulis program js, anda mungkin sering perlu menentukan jenis objek Sebagai contoh, jika anda menulis fungsi, anda perlu menentukan jenis parameter yang berbeza untuk menulis kod yang berbeza.
Pertama sekali, anda mungkin memikirkan jenis operator Lihat contoh berikut:
<script type="text/javascript"> var object = {}; var b = true; alert(typeof object + " " + typeof b); </script>
Hasil yang diperoleh adalah seperti berikut:
/*var object = {}; var b = true; alert(typeof object + " " + typeof b);*/ alert(typeof null + " " + typeof undefined)
var now = new Date(); var pattern = /^[\s\S]*$/; var names = ['zq', 'john']; alert((now instanceof Date) + " " + (pattern instanceof RegExp) + " " + (names instanceof Array));
main.html
<!doctype html> <html lang="en"> <head> <title>Main</title> </head> <frameset cols="45%,*"> <frame name="frame1" src="frame1.html"/> <frame name="frame2" src="frame2.html"/> </frameset> </html>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>frame1</title> </head> <script type="text/javascript"> var names = ['riccio zhang', 'zq', 'john']; </script> <body style="background: #ccc"> </body> </html>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>frame2</title> <script type="text/javascript"> document.write("top.frame1.names instanceof Array:" + (top.frame1.names instanceof Array)); document.write("<br/>"); document.write("top.frame1.names instanceof top.frame1.Array:" + (top.frame1.names instanceof top.frame1.Array)); document.write("<br/>"); document.write("top.frame1.Array === top.frame2.Array?" + (top.frame1.Array === top.frame2.Array)); </script> </head> <body style="background: #747474"> </body> </html>
var toString = {}.toString; var now = new Date(); alert(toString.call(now))
<. 🎜>{}.toString bermaksud mendapatkan kaedah toString pada objek Object (kaedah ini ialah salah satu kaedah asas objek Object), dan toString.call(now) bermaksud memanggil kaedah toString. Memanggil kaedah toString() yang paling asli bagi objek Tarikh (kaedah ini ialah kaedah pada Objek) boleh memaparkan rentetan jenis [Tarikh objek]. Jika ia adalah Array, perkataan [Array objek] akan dihasilkan, yang bermaksud bahawa operasi di atas akan memaparkan perkataan yang serupa dengan [Kelas objek], jadi bolehkah kita mengetahui jenisnya hanya dengan menilai rentetan? Daripada ini, kelas alat berikut boleh ditulis:
tools.jsvar tools = (function(undefined){ var class2type = {}, toString = {}.toString; var fun = { type: function (obj){ return obj === null || obj === undefined ? String(obj) : class2type[toString.call(obj)] }, isArray: function (obj){ return fun.type(obj) === "array"; }, isFunction: function (obj){ return fun.type(obj) === "function"; }, each: function (arr, callback){ var i = 0, hasLength = arr.length ? true : false; if(!callback || (typeof callback !== 'function') || !hasLength){ return; } for(i = 0; i< arr.length; i++){ if(callback.call(arr[i], i, arr[i]) === false){ break; } } } }; fun.each("Boolean Number String Array Date RegExp Object Function".split(" "), function(i, name){ class2type["[object "+ name +"]"] = name.toLowerCase(); }); return fun; })();
fram2.html
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>frame2</title> <script type="text/javascript" src="tools.js"></script> <script type="text/javascript"> document.write("top.frame1.names instanceof Array:" + (top.frame1.names instanceof Array)); document.write("<br/>"); document.write("top.frame1.names instanceof top.frame1.Array:" + (top.frame1.names instanceof top.frame1.Array)); document.write("<br/>"); document.write("top.frame1.Array === top.frame2.Array?" + (top.frame1.Array === top.frame2.Array)); document.write("<br/>"); document.write("tools.isArray(top.frame1.names)?" + tools.isArray(top.frame1.names)); </script> </head> <body style="background: #747474"> </body> </html>
Pada ketika ini, jenis objek boleh ditentukan dengan mudah melalui kelas atas.
Nota: Elemen seperti amaran tidak boleh dinilai dalam IE.