JS区分Object与Aarry方法总结
一、经常遇见的问题:
JS中判断一个对象的类型时,通常使用typeof,这时候问题就来了,因为typeof()辨别数组的时候返回的是object,所以JS
中判断一个对象是不是数组需要一些特殊的处理方式,下面将介绍个人总结的六种处理方法。
二、开门见山
开发中要判断一个对象是不是数组,推荐使用下面这个函数:
function isArray(obj){ if(Array.isArray){ return Array.isArray(obj); }else{ return Object.prototype.toString.call(obj)==="[object Array]"; } }
上面这个函数是方便急于解决问题的人,下面我将具体述说六种方法,因为可能面试的时候考官需要一个知识全面的你;
三、六种方案详解:
(1)方法一:利用toString方法
通过调用toString( )方法试着将该变量转化为代表其类型的string。该方法对于真正的array可行;参数对象转化为string时
返回[object Arguments]会转化失败;此外, 对于含有数字长度属性的object类也会转化失败。
方法如下:
<!DOCTYPE html> <html> <head> <title>Array的判断方法</title> <meta charset="utf-8"/> <script> function isArrayOne(arr){ return <span style="color:#cc0000;">Object.prototype.toString.call(arr) === "[object Array]";</span> } var obj = {"k1":"v1"}; var arr = [1,2]; console.log("对象的结果:"+isArrayOne(obj)); console.log("数组的结果:"+isArrayOne(arr)); </script> </head> <body> </body> </html>
结果如图:
注意:推荐使用“===”全等于而不使用“==”等等于,因为效率更高!
(2)方法二:通过isArray:
使用Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的,前提是有支持这一函数,其实isArray就是
方法一的封装使用。
使用方法十分简单:
Array.isArray(obj); //obj是待检测的对象
返回true或false,如果为true则为数组
(3)方法三:通过instanceof运算符来判断,
注意:instanceof运算符左边是子对象(待测对象),右边是父构造函数(这里是Array),
即:子对象 instanceof 父构造函数
instance: 实例:凡是用new 构造函数()创建出的对象,都称为是构造函数的实例
扯半天都迷糊了,还是直接看代码好:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> <script> var obj = {"k1":"v1"}; var arr = [1,2]; console.log("Instanceof处理对象的结果:"+(obj instanceof Array)); console.log("Instanceof处理数组的结果:"+(arr instanceof Array)); </script> </head> <body> </body> </html>
运行结果如下:
(4)使用isPrototypeOf()函数
原理:检测一个对象是否是Array的原型(或处于原型链中,不但可检测直接父对象,还可检测整个原型链上的所有父对象)
使用方法: parent.isPrototypeOf(child)来检测parent是否为child的原型;
需注意的是isPrototypeOf()函数实现的功能和instancof运算符非常类似;
具体代码:
Array.prototype.isPrototypeOf(arr) //true表示是数组,false不是数组
(5)利用构造函数constructor
具体代码:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> <script> var obj = {'k':'v'}; var t1 = new Array(1); var t2 = t1; console.log(obj.constructor == Array); console.log(t1.constructor == Array); console.log(t2.constructor == Array); </script> </head> <body> </body> </html>
结果如图
(6)使用typeof(对象)+类型名结合判断:
代码如下:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> <script> function isArrayFour(arr){ if(typeof(arr)==="object"){ if(arr.concat){ return "This is Array"; }else{ return "This Not Array"; } } } var arr = [1]; var obj = {'k':'v'}; console.log(typeof(arr)); console.log(typeof(obj)); console.log(isArrayFour(arr)); console.log(isArrayFour(obj)); </script> </head> <body> </body> </html>
结果如下:
这种方法其实有局限性,有的同学可能一下就破解了,那就是要是
要是对象中不巧定义了这属性怎么办
var obj = {'concat':'Teast me?'};
以上这篇JS区分Object与Aarry的六种方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHP中文网。
更多JS区分Object与Aarry方法总结相关文章请关注PHP中文网!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel membincangkan membuat, menerbitkan, dan mengekalkan perpustakaan JavaScript, memberi tumpuan kepada perancangan, pembangunan, ujian, dokumentasi, dan strategi promosi.

Artikel ini membincangkan strategi untuk mengoptimumkan prestasi JavaScript dalam pelayar, memberi tumpuan kepada mengurangkan masa pelaksanaan dan meminimumkan kesan pada kelajuan beban halaman.

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Artikel ini membincangkan debugging JavaScript yang berkesan menggunakan alat pemaju pelayar, memberi tumpuan kepada menetapkan titik putus, menggunakan konsol, dan menganalisis prestasi.

Artikel ini menerangkan cara menggunakan peta sumber untuk debug JavaScript minifikasi dengan memetakannya kembali ke kod asal. Ia membincangkan membolehkan peta sumber, menetapkan titik putus, dan menggunakan alat seperti Chrome Devtools dan Webpack.

Sebaik sahaja anda telah menguasai tutorial TypeScript peringkat kemasukan, anda harus dapat menulis kod anda sendiri dalam IDE yang menyokong TypeScript dan menyusunnya ke dalam JavaScript. Tutorial ini akan menyelam ke dalam pelbagai jenis data dalam TypeScript. JavaScript mempunyai tujuh jenis data: null, undefined, boolean, nombor, rentetan, simbol (diperkenalkan oleh ES6) dan objek. Typescript mentakrifkan lebih banyak jenis atas dasar ini, dan tutorial ini akan meliputi semuanya secara terperinci. Jenis data null Seperti JavaScript, Null dalam TypeScript

Artikel ini meneroka penggunaan rangka koleksi Java yang berkesan. Ia menekankan memilih koleksi yang sesuai (senarai, set, peta, giliran) berdasarkan struktur data, keperluan prestasi, dan keselamatan benang. Mengoptimumkan penggunaan pengumpulan melalui cekap

Tutorial ini akan menerangkan cara membuat carta pai, cincin, dan gelembung menggunakan carta.js. Sebelum ini, kami telah mempelajari empat jenis carta carta.js: carta baris dan carta bar (tutorial 2), serta carta radar dan carta rantau polar (Tutorial 3). Buat carta pai dan cincin Carta pai dan carta cincin sangat sesuai untuk menunjukkan perkadaran keseluruhan yang dibahagikan kepada bahagian yang berlainan. Sebagai contoh, carta pai boleh digunakan untuk menunjukkan peratusan singa lelaki, singa wanita dan singa muda dalam safari, atau peratusan undi yang diterima oleh calon yang berbeza dalam pilihan raya. Carta pai hanya sesuai untuk membandingkan parameter tunggal atau dataset. Harus diingat bahawa carta pai tidak dapat menarik entiti dengan nilai sifar kerana sudut kipas dalam carta pai bergantung pada saiz berangka titik data. Ini bermaksud mana -mana entiti dengan perkadaran sifar
