1. 程式人生 > >JavaScript判斷一個變數是物件還是陣列

JavaScript判斷一個變數是物件還是陣列

typeof都返回object

在JavaScript中所有資料型別嚴格意義上都是物件,但實際使用中我們還是有型別之分,如果要判斷一個變數是陣列還是物件使用typeof搞不定,因為它全都返回object

1 2 3 4 5 6 var o = { 'name':'lee' }; var a = ['reg','blue']; document.write( ' o typeof is ' + typeof o); document.write( ' <br />'); document.write( ' a typeof is ' + typeof a);

執行:

o typeof is object
a typeof is object   

因此,我們只能放棄這種方法,要判斷是陣列or物件有兩種方法

第一,使用typeof加length屬性

陣列有length屬性,object沒有,而typeof陣列與物件都返回object,所以我們可以這麼判斷

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var o = { 'name':'lee' }; var a = ['reg','blue']; var getDataType = function(o){ if(typeof
o == 'object'){ if( typeof o.length == 'number' ){ return 'Array'; }else{ return 'Object';    } }else{ return 'param is no object type'; } }; alert( getDataType(o) );    // Object alert( getDataType(a) );    // Array alert( getDataType(1) );    // param is no object type alert( getDataType(true) ); // param is no object type
alert( getDataType('a') );  // param is no object type

第二,使用instanceof

使用instanceof可以判斷一個變數是不是陣列,如:

1 2 3 4 5 var o = { 'name':'lee' }; var a = ['reg','blue']; alert( a instanceof Array );  // true alert( o instanceof Array );  // false

也可以判斷是不是屬於object

1 2 3 4 5 var o = { 'name':'lee' }; var a = ['reg','blue']; alert( a instanceof Object );  // true alert( o instanceof Object );  // true

但陣列也是屬於object,所以以上兩個都是true,因此我們要利用instanceof判斷資料型別是物件還是陣列時應該優先判斷array,最後判斷object

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var o = { 'name':'lee' }; var a = ['reg','blue']; var getDataType = function(o){ if(o instanceof Array){ return 'Array' }else if( o instanceof Object ){ return 'Object'; }else{ return 'param is no object type'; } }; alert( getDataType(o) );    // Object alert( getDataType(a) );    // Array alert( getDataType(1) );    // param is no object type alert( getDataType(true) ); // param is no object type alert( getDataType('a') );  // param is no object type

如果你不優先判斷Array,比如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var o = { 'name':'lee' }; var a = ['reg','blue']; var getDataType = function(o){ if(o instanceof Object){ return 'Object' }else if( o instanceof Array ){ return 'Array'; }else{ return 'param is no object type'; } }; alert( getDataType(o) );    // Object alert( getDataType(a) );    // Object alert( getDataType(1) );    // param is no object type alert( getDataType(true) ); // param is no object type alert( getDataType('a') );  // param is no object type

那麼陣列也會被判斷為object。

相關推薦

JavaScript判斷一個變數物件還是陣列

typeof都返回object 在JavaScript中所有資料型別嚴格意義上都是物件,但實際使用中我們還是有型別之分,如果要判斷一個變數是陣列還是物件使用typeof搞不定,因為它全都返回object 1 2 3 4 5 6 var o = { 'name':'lee' }; var a

javascript判斷一個物件是否為陣列中學習js語法

1,真正的陣列的判斷方法 javascript中最簡單的宣告陣列方法為: var a = []; 判斷是否為陣列的最直接的方法為: a instanceof Array //true a .constructor == Array //true 這裡涉及到一個i

js - 【陣列】怎麼判斷一個變數陣列型別的?

怎麼判斷一個數組是陣列呢? 其實這個也是一個常考的題目。依稀記得我為數不多的面試經過中都被問道過。 方案一: instanceof variable instanceof Array 解決思路:  使用型別判斷所給的方法 instanceof &nb

JavaScript判斷一個物件是否為空

寫一個函式 isEmptyObject,判斷一個物件是不是空物件 function isEmptyObject(obj){ for(var item in obj){ ret

判斷一個變數是不是陣列Array型別的方法

JavaScript中檢測物件的方法 1.typeof操作符這種方法對於一些常用的型別來說那算是毫無壓力,比如Function、String、Number、Undefined等,但是要是檢測Array的物件就不起作用了。  複製程式碼程式碼如下: alert(type

前端面試紀實(四):如何判斷一個變數陣列:typeof和instanceof

1 typeof 這也是面試官問我的一個問題 我的第一反應是typeof。但是正中對方下懷。 > typeof [] 'object' 這樣返回的是object 這是一個JS很怪異的地方。 為什麼很怪異的呢,因為小白往往以{}和[]區分Array和O

怎樣判斷一個變數的型別?

package main import "fmt" var container = []string{"zero", "one", "two"} func main() { container := map[int]str

判斷一個變數是否在兩變數之間

1 #include <bits/stdc++.h> 2 using namespace std; 3 4 bool inRange(int x,int left,int right) 5 { 6 if(left>right) return inRang

JavaScript判斷是否為物件

var obj = {}; 1、toString(推薦)判斷obj的原型,若其原型為物件,根據JavaScript的繼承性,obj即為物件 Object.prototype.toString.call(obj) === ‘[Object Object]’ 2、c

判斷一個js物件是否是Array

今天在做題時遇到這個問題,找答案的時候,發現評論裡大神好多 。 在開發中,我們經常需要判斷某個物件是否為陣列型別,總結判斷某個物件是否是陣列的方法。 1.typeof 操作符 對於Function, String, Number ,Undefined 等幾種型別的物件來說,他完全可

如何判斷一個COM物件是否可用

  同事工作中遇到這個問題,不想在建立物件失敗時才知道原來對應的COM物件不可用。自己專案中用到了這個,遂總結一下,希望對大家有用。  要判斷一個COM物件是否有用,首先要判斷該COM物件的CLSID是否在登錄檔中註冊,但註冊了並不能保證其可用,因為如果我誤刪了該COM物件的載體-DLL(或exe),該COM

如何判斷一個C++物件是否在堆疊上

要解答這個問題,其實就是要知道的堆疊的起始地址, 而我們知道堆疊其實就是一段有相同屬性的記憶體頁面,而Windows也是有API讓我們查詢虛擬記憶體的頁面分配情況的。所有我們可以通過VirtualQuery這個API來獲取堆疊的起始地址,然後就可以得到答案了。 BOOL

thinkphp模板裡面判斷一個變數是否存在於一個數組中 相當於in_array() in 或range 標籤

thinkphp 模板裡面可以這樣寫包含操作 //in 標籤 <in name="變數名" value="值1,值2,...">要輸出的內容</in> <in nam

JavaScript - 寫一個純函式 - 求陣列中所有大於`1`的和, 如果都是`負數`或者`空陣列`那麼返回`0`

JavaScript  - 寫一個純函式 -  求陣列中所有大於`1`的和, 如果都是`負數`或者`空陣列`那麼返回`0` 推薦使用 第二種  function positiveSum (arr) { // 最讓人接受的方法 var total = 0;

JS中如何判斷一個變數是null/undefined

本文轉自http://blog.csdn.net/sunny_ran/article/details/52572288 JS 中如何判斷 undefined JavaScript 中有兩個特殊資料型別:undefined 和 null,下節介紹了 null 的判斷,下面

javascript判斷一個字串或者數組裡面出現最多的元素及其出現的次數

不多說哈,直接上程式碼: 判斷一個字串: var str = "aabbbcccc"; var obj = {};//定義一個物件來儲存str拆分出來的元素,把一個字元當做key,字元出現的次數當做value 儲存在obj中 for (var i = 0;

js判斷一個元素是否在陣列

js中存在一個數組,如何判斷一個元素是否存在於這個陣列中呢,首先是通過迴圈的辦法判斷,程式碼如下:var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//迴圈的方式 /** * 使用迴圈的方式判斷一個

python3怎麼判斷一個變數的型別(isinstance,type)

兩個方法 一個通用 一個個別用不了的情況下(入list) 1 isinstance def add_key(self,keyname):         self.keyname=keyname         if isinstance(self.keyname,in

JavaScript判斷一個頁面是否是使用微信開啟,並調跳轉

//判斷是否是微信開啟 var home_index = "{{ path('wap_homepage') }}"; function isWeiXin(){     var ua = window.navigator.userAgent.toLowerCase();  

java中怎麼判斷一個字串是否存在陣列

/*這是一個靜態函式,不用宣告物件就可以用的,如你的類名為Test,在任何情況下都可以呼叫Test.isHave函式*/ public static boolean isHave(String[]