Javascript中判断变量是数组还是对象(array还是object)

时间:2024-04-17 09:51:28 

怎样判断一个JavaScript变量是array还是obiect?
答案:
1、如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'。
此问题的一个可行的答案是是检查该变量是不是object,并且检查该变量是否有数字长度(当为空array时长度也可能为0)。
然而,参数对象【arguments object】(传给制定函数的所有参数),也可能会适用于上述方法,技术上来说,参数对象并不是一个array。
此外,当一个对象有a.length属性的时候,这个方法也不成立。


// Real array 正在的数组
var my_array = [];
// Imposter! 冒名顶替的!
var my_object = {};
my_object.length = 0;
// Potentially faulty 潜在的错误
function is_this_an_array(param) {
if (typeof param === 'object' && !isNaN(param.length)) {
console.log('Congrats, you have an array!');
}
else {
console.log('Bummer, not an array');
}
}
// Works 成功
is_this_an_array(my_array);
// Works, but is incorrect 成功了,但是不正确
is_this_an_array(my_object);


2、回答这个问题的另一个答案是用一个更加隐蔽的方法,调用toString( )方法试着将该变量转化为代表其类型的string。
该方法对于真正的array可行;参数对象转化为string时返回[object Arguments]会转化失败;此外,
对于含有数字长度属性的object类也会转化失败。


// Real array 真正的数组
var my_array = [];
// Imposter! 冒名顶替的!
var my_object = {};
my_object.length = 0;
// Rock solid 坚如磐石(检验函数)
function is_this_an_array(param) {
if (Object.prototype.toString.call(param) === '[object Array]') {
console.log('Congrats, you have an array!');
}
else {
console.log('Bummer, not an array');
}
}
// Works 成功了
is_this_an_array(my_array);
// Not an array, yay! 不是数组(array)!
is_this_an_array(my_object);


3、此外,在可能不可靠的多框架DOM环境中,instanceof是个完美合适的操作。
扩展阅读:"Instanceof Considered Harmful…"
http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray


var my_array = [];
if (my_array instanceof Array) {
console.log('Congrats, you have an array!');
}


4、对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray


var my_array = [];
if (Array.isArray(my_array)) {
console.log('Congrats, you have an array!');
}
标签:Javascript变量,array,object
0
投稿

猜你喜欢

  • 防止删库跑路及高级代码投毒技巧

    2022-03-27 13:20:16
  • 修改mysql密码与忘记mysql密码的处理方法

    2024-01-23 21:53:48
  • Python SSL证书验证问题解决方案

    2022-11-06 13:54:35
  • MySQL数据库中表的操作详解

    2024-01-26 20:37:27
  • python与c语言的语法有哪些不一样的

    2021-07-09 17:47:35
  • Webpack基础教程之名词解释

    2022-12-17 19:04:30
  • 超好用:免费的图床

    2023-03-31 09:55:42
  • Python编程修改MP3文件名称的方法

    2021-10-26 07:56:36
  • 在vscode中配置python环境过程解析

    2021-10-08 20:28:15
  • Go并发编程之sync.Once使用实例详解

    2024-04-26 17:21:23
  • Pytorch中的model.train() 和 model.eval() 原理与用法解析

    2022-06-06 20:51:04
  • Golang 实现 Redis系列(六)如何实现 pipeline 模式的 redis 客户端

    2024-05-13 10:44:23
  • python基于物品协同过滤算法实现代码

    2021-06-23 21:56:16
  • python 3.7.0 下pillow安装方法

    2023-07-09 09:47:49
  • Python中使用双下划线防止类属性被覆盖问题

    2021-05-04 04:02:44
  • OpenCV半小时掌握基本操作之模板匹配

    2022-05-03 10:36:41
  • 浅谈Python基础之I/O模型

    2021-11-17 18:38:03
  • 详解C#把DataTable中数据一次插入数据库的方法

    2024-01-17 20:23:51
  • 网页切片算法的若干问题

    2008-04-17 13:10:00
  • python3.6中anaconda安装sklearn踩坑实录

    2023-03-16 19:17:15
  • asp之家 网络编程 m.aspxhome.com