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.mzph.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;以员…