博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
阅读量:6716 次
发布时间:2019-06-25

本文共 2308 字,大约阅读时间需要 7 分钟。

前提:先研究javascript中的变量有几种,参考:

测试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://sakmo.baihongyu.com/

你可能感兴趣的文章
Python yield与实现
查看>>
购物车特效收集
查看>>
Access中一句查询代码实现Excel数据导入导出
查看>>
2015第49周二
查看>>
Sphinx/Coreseek 4.1的安装流程
查看>>
邮件服务器Postfix的管理 重启php-fpm
查看>>
Android Studio 项目代码全部消失--出现原因及解决方法
查看>>
SQL Server---存储过程
查看>>
MySQL Performance-Schema(二) 理论篇
查看>>
搭建SSH详细步骤及相关说明
查看>>
Android IOS WebRTC 音视频开发总结(五五)-- 音视频通讯中的抗丢包与带宽自适应原理...
查看>>
Libgdx: 将Texturepacker打包的PNG图片还原成一张一张的单个的
查看>>
再议Swift操作符重载
查看>>
pc机进入android的shell
查看>>
javascript Date format(js日期格式化)
查看>>
Loadrunner中参数化实战(6)-Random+Each occurrence
查看>>
tomcatserver解析(六)-- Acceptor
查看>>
asp.net判断访问者是否来自移动端
查看>>
Python 一些常用模块的安装
查看>>
严苛模式(StrictMode)
查看>>