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
Javascript判断object还是list/array的类型(包含javascript的数据类型研究)的更多相关文章
- 【JavaScript】Object.prototype.toString.call()进行类型判断
权声明:本文为博主原创文章,未经博主允许不得转载. op = Object.prototype, ostring = op.toString, ... function isFunction(it) ...
- 用Javascript判断访问来源操作系统, 设备, 浏览器类型
var browser = { os : function() { var u = navigator.userAgent; return {// 操作系统 linux: !!u.match(/\(X ...
- JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性
前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...
- JavaScript判断对象的类型
JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object. ...
- Javascript 判断变量类型的陷阱 与 正确的处理方式
Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...
- JavaScript判断对象类型及节点类型、节点名称和节点值
一.JavaScript判断对象类型 1.可以使用typeof函数判断对象类型 function checkObject1(){ var str="str"; console.lo ...
- javascript 判断对象类型
typeof typeof是一个一元运算符,它返回的结果 始终是一个字符串,对不同的操作数,它返回不同的结果. 此表总结了typeof所有可能的返回值: 操作数类型 返回值 undefined &qu ...
- JavaScript 用七种方式教你判断一个变量是否为数组类型
JavaScript 如何判断一个变量是否为数组类型 引言 正文 方法一 方法二 方法三 方法四 方法五 方法六 方法七 结束语 引言 我们如何判断一个变量是否为数组类型呢? 今天来给大家介绍七种方式 ...
- javascript 判断变量是否是数组(Array)
过完春节又有好多人寻找新的机会,旁边的人面试完就会分享一些问题,明明会的但是面试的时候,想不全,面试官不满意...这个懊恼的行为,今天的文章跟大家分享下:javascript如何判断便是是数组. 1. ...
随机推荐
- Maven对插件进行全局设置
并不是所有插件都适合从命令行配置,有些参数的值从项目创建到发布都不会改变,或者很少改变,对于这种情况,在POM文件中一次性配置就显然比重复在命令行中输入要方便了. 用户可以在生命插件的时候,对插件进行 ...
- 移动端图片随手势移动react组件(附移动开发小tips)
这个效果是公司产品中一个用到的效果,用于展示项目的信息,废话少说,先上效果图,代码在最后:),这个组件是在上篇博客中用webpack搭建的环境中完成的http://www.cnblogs.com/wu ...
- When it comes to intrusion analysis and forensics
以下内容的出现可以追溯到一个发生在互联网的安全事件: Z公司遭受某种攻击,服务器上被植入了Linux DDOS木马,部分系统命令入ls遭替换,攻击者已经获得该服务器root权限: 影响更恶劣的是,连接 ...
- iOS 获取设备唯一标示符的方法
在开发中会遇到应用需要记录设备标示,即使应用卸载后再安装也可重新识别的情况,在这写一种实现方式--读取设备的UUID(Universally Unique Identifier)并通过KeyChain ...
- [原创]Linux-day1
原创:转发务必注明出处http://www.cnblogs.com/0zcl/p/6077298.html 一.Linux的基本原则 由目的单一的小程序组成:组合小程序完成复杂任务 一切皆文件 尽量避 ...
- MS SQLServer 2008数据库处于SUSPECT情况下的处理
做任何恢复操作之前,请先备份.mdf, .ndf和.ldf文件. use master go --将处于suspect状态下的数据库设置为紧急状态 alter database <Databas ...
- SQL 数据优化之不建立索引的情况
索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本.排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的 ...
- Spark SQL 之 Data Sources
#Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...
- 烂泥:python2.7和python3.5源码安装
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天在centos6.6安装ansible时,一直提示python版本不对,导致不能安 ...
- CentOS7 配置LAMP
这两天要带新同事.没办法,只有现学现卖,又回到Linux的怀抱了.今晚想配置一下LAMP环境,但是之前用的6.6,今晚想闷声做大死,用一次7试试.网上找了很多教程,但是好像转载的都不负责任,有些到下一 ...