Javascript判斷object還是list/array的類型(包含javascript的數據類型研究)

前提:先研究javascript中的變量有幾種,參考:

http://www.w3school.com.cn/js/js_datatypes.asp

http://glzaction.iteye.com/blog/1285147

測試1:

typeof關鍵字

var obj= {test:'test'};

typeof obj;//輸出object

var list = [{test:'test'}];

typeof list;//輸出object

var str = 'str';

typeof str;//輸出string

var i = 1;

typeof i;//輸出number

var b = false;

typeof b;//輸出boolean

var n = null;

typeof n;//輸出object

n==null;//輸出true

var n;

typeof n;//輸出undefined

直接輸出一個沒有定義的變量

typeof a;//輸出undefined

function func(){}

typeof func;//輸出function

以上可以發現,只能判斷list和obj同時輸出了object

在判斷某個對象是否為指定類型時,可以用==或者===,比如:typeof func === 'function'或者typeof func == 'function'

測試2:

Object.prototype.toString.call( obj )

var obj= {test:'test'};

Object.prototype.toString.call( obj );//輸出[object Object]

var list = [{test:'test'}];

Object.prototype.toString.call( list );//輸出[object Array]

var str = 'str';

Object.prototype.toString.call( str );//輸出[object String]

var i = 1;

Object.prototype.toString.call( i );//輸出[object Number]

var b = false;

Object.prototype.toString.call( b );//輸出[object Boolean]

var n = null;

Object.prototype.toString.call( n );//輸出[object Null]

n==null;//輸出true

var n;

Object.prototype.toString.call( n );//輸出[object Undefined]

直接輸出一個沒有定義的變量

Object.prototype.toString.call( a );//輸出:Uncaught ReferenceError: n1 is not defined,會報異常,阻止執行下面

function func(){}

Object.prototype.toString.call( function );//輸出[object Function]

這個方法可以很明確的直到obj和list的類型

判斷時使用Object.prototype.toString.call( list )==='[object Array]'或者Object.prototype.toString.call( list )=='[object Array]',==或者===一樣的效果。

測試3:

如果使用jquery,可以使用$.isArray(obj)的方法,如下:

var a = ["A", "AA", "AAA"];
if($.isArray(a)) {console.log("a is an array!");
} else {console.log("a is not an array!");
}

但是測試發現,只能判斷數組,沒有判斷對象的方法。

測試4:

instanceof 關鍵字

var obj= {test:'test'};

var str = 'str';

var i = 1;
var b = false;

var list = [{test:'test'}];

var n = null;

function func(){}

通過測試,使用如:obj instanceof Object的形式,只能是判斷兩種類型Object和Array,其中Boolean、Number、String可以判斷,但是會返回false,如上面i和b變量;如果判斷為null或者undefind會報Uncaught TypeError: Right-hand side of 'instanceof' is not an object這樣的錯誤。

測試5:

直接通過Array.isArray(obj),javascript的原生方法,不過這個只能判斷數組。

測試5:

通過obj.constructor關鍵字

var obj= {test:'test'};

var str = 'str';

var i = 1;
var b = false;

var list = [{test:'test'}];

var n = null;

function func(){}

通過測試,使用如:str == String.constructor的形式,只能判斷Object、Array、String、Boolean、Number,對于null、function、undefind這些會報異常。

?

參考:

http://stackoverflow.com/questions/4775722/check-if-object-is-array

http://www.jb51.net/article/21945.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Core Data

簡介 Core Data是iOS5之后才出現的一個框架,它提供了對象-關系映射(ORM)的功能,即能夠將OC對象轉化成數據,保存在SQLite數據庫文件中,也能夠將保存在數據庫中的數據還原成OC對象。在此數據操作期間,我們不需要編寫任何…

tbase同步mysql_mysql主從同步

MySQL主從介紹MySQL主從叫做Replication、AB復制,A和B做主從后,在A上寫數據。B上也會同步A的數據,兩者實現實時同步MySQL是基于binlog日志來同步的,主上必須開啟binlog才能進行主從同步,同步過程大概有三個步驟(1)主將…

2017將轉行進行到底

2016 年說著轉行,最后還是在匆匆中找了一份老本行,此刻的心情還是無愛,畢竟螺絲一直分不清啊,不喜歡就是不喜歡。看了django的教程,不得不感嘆國外的書寫的相對優秀一點,《learning django web development…

mysql中函數是否可以返回多個值_是否可以從mysql函數返回多個值?

我的臟解決方案是:1.連接字符串中的值. 2返回字符串. 3 Splits將字符串返回值.我認為它不優雅,我確信這有局限性,但它適用于簡單的情況還有必要創建分裂函數,因為Mysql沒有這個函數:首先編輯你的功能.CREATE FUNCTION yourFunctionWith2valuesForReturni…

lua自定義迭代器

迭代器 http://www.tutorialspoint.com/lua/lua_iterators.htm 迭代器能夠讓你遍歷某個集合或者容器中的每一個元素。 對于lua來說, 集合通常指代 table, 用于創建變化的數據結構, 類似數組。 Iterator is a construct that enables you to t…

mysql非主鍵索引_主鍵索引和非主鍵索引的區別

1. 什么是最左前綴原則?以下回答全部是基于MySQL的InnoDB引擎例如對于下面這一張表如果我們按照 name 字段來建立索引的話,采用B樹的結構,大概的索引結構如下如果我們要進行模糊查找,查找name 以“張"開頭的所有人的ID&#…

優美的配色方案設計

2019獨角獸企業重金招聘Python工程師標準>>> 怎么做好設計配色一直是個難題,雖然網站上有各種各樣的色庫,但配色仍然至關重要,不得已的話可以親自動手,況且樂趣滿滿。 這個沒有一套標準,所以看自己怎么喜歡…

It's a start!

開始博客之旅轉載于:https://www.cnblogs.com/catchingdream/p/5843172.html

mysql死鎖釋放時間參數_【Mysql】mysql 事務未提交導致死鎖 Lock wait timeout exceeded; try restarting transaction 解決辦法...

問題場景問題出現環境:1、在同一事務內先后對同一條數據進行插入和更新操作;2、多臺服務器操作同一數據庫;3、瞬時出現高并發現象;不斷的有一下異常拋出,異常信息:org.springframework.dao.CannotAcquireLo…

ORACLE sqlplus設置行數和寬度

1) 查看目前的pagesize,默認是14:Sqlplus代碼show pagesize; 2) 將pagesize設置好100,則可以一次顯示夠多行記錄了:Sqlplus代碼set pagesize 100; 2. 設置行的寬度1) 查看目前的linesize,默認是80:Sqlplus代碼show linesize; 2) 設置成100或者更寬都可以:Sqlplus代碼set li…

mysql關系模式怎么畫_關系數據庫與mysql

表下面是阿里的mysql設計原則,可以參考,不一定按照阿里規則,但一個團隊一定要有規則,如果現在沒有規則,從現在開始,慢慢推廣,適應1.【強制】表達是與否概念的字段,必須使用 is_xxx的…

Javascript 構造函數模式、原型模式

前兩天寫完組合繼承,打算總結一下原型繼承的,不過今天看了一下工廠模式、構造函數模式和原型模式,覺得有必要總結一下以加深印象。 ———————————————————————————————————————————————————…

2016年CCF第七次測試 俄羅斯方塊

1 //2016年CCF第七次測試 俄羅斯方塊2 // 這道小模擬題還是不錯3 // 思路&#xff1a;處理出輸入矩陣中含1格子的行數和列數4 // 再判是否有一個格子碰到底部&#xff0c;否則整體再往下移動一步&#xff0c;如果有一個格子不能移動&#xff0c;要返回到前一步5 6 #include <…

springmvc視圖解析器_SpringMVC視圖及REST風格

什么是視圖解析器&#xff1f;springMVC用于處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver的主要作用是把一個邏輯上的視圖名稱解析成一個真的的視圖&#xff0c;而SpringMVC中用于把View對象呈現給客戶端的是View對象本身&#xff0c;而ViewResolver只是把邏輯…

mysql5.7.x 1251_MySql-8.0.x免安裝版下載與配置,Navicat打開數據庫鏈接報錯1251的解決辦法...

概述MySQL從5.7一下子跳到了MySQL8.0, 其中的變化必然是很大的, 這里就不說了, 本文主要講解最新版MySQL安裝的事情.實際上5.7版本后的mysql免安裝版都是沒有data文件和my.ini文件的&#xff0c;下面再具體說明怎么生成&#xff0c;注意不能自己手動新建.下載下載程序必然去官網…

To install 64-bit ODBC drivers

為了更充分的利用硬件資源&#xff0c;我想很多人都開使用64位操作系統了&#xff0c;同時你可以也發現了在64位操作系統上ODBC的驅動找不到了&#xff0c;所以ODBC的東西都沒法用了。 因為2007以前版本的Office只有32位版本&#xff0c;所以我們不能在64位系統上使用ODBC。使用…

【Qt開發】QTableWidget設置根據內容調整列寬和行高

QTableWidget要調整表格行寬主要涉及以下一個函數 1.resizeColumnsToContents(); 根據內容調整列寬 2.resizeColumnToContents(int col); 根據內容自動調整給定列寬 3.horizontalHeader()->setResizeMode 把給定列…

深入淺出mysql數據開發_深入淺出MySQL數據庫開發、優化與管理維護 PDF掃描版[513KB]...

深入淺出MySQL數據庫開發、優化與管理維護 內容介紹&#xff1a;本書從數據庫的基礎、開發、優化、管理維護4個方面對MySQL進行了詳細的介紹&#xff0c;其中每一部分都獨立成篇。本書內容實用&#xff0c;覆蓋廣泛&#xff0c;講解由淺入深&#xff0c;適合于各個層次的讀者。…

Understand Lambda Expressions in 3 minutes(翻譯)

本文翻譯自CodeProject上的一篇簡單解釋Lambda表達式的文章&#xff0c;適合新手理解。譯文后面我補充了一點對Lambda表達式的說明。 1.什么是Lambda表達式&#xff1f; Lambda表達式是一種匿名方法&#xff0c;多數情況下用來在LINQ中快速創建委托。簡單地說&#xff0c;它代表…

Hibernate二級緩存配置

一、定義&#xff1a; 二級緩存是進程或集群范圍內的緩存&#xff0c;可以被所有的Session共享&#xff0c;是可配置的插件 二、二級緩存原理圖 解析&#xff1a;每次從二級緩存中取出的對象&#xff0c;都是一個新的對象。 三、配置步驟如下&#xff1a; 同理&#xff1a;以員…