JS编程建议——50:正确检测数组类型

建议50:正确检测数组类型
由于数组和对象的数据同源性,导致在JavaScript编程中经常会出现:在必须使用数组时使用了对象,或者在必须使用对象时使用了数组。
选用数组或对象的规则很简单:当属性名是小而连续的整数时,应该使用数组,或者当对属性的位置和排列顺序有要求时,应该使用数组。否则,使用对象。
JavaScript语言对数组和对象的区别是混乱的。typeof运算符检测数组的类型是“object”,这没有什么意义,因此在正确检测数组和对象方面JavaScript没有提供很多的机制。这时可以通过自定义is_ array函数来弥补这个缺陷。
var is_array = function(value) {

return value && typeof value === 'object' && value.constructor === Array;

};
不过,上面函数在识别从不同的窗口(window)或帧(frame)中构造的数组时会失败,要想准确地检测外部数组类型,还需要更进一步地完善该函数。
var is_array = function(value) {

return value &&
typeof value === 'object' &&
value.constructor === Array &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));

};
在完善后的函数中,首先要判断这个值是否为真,函数不接受null和其他值为假的值。其次,判断对这个值的typeof运算的结果是否是object。对于对象、数组和null来说,得到的都将是true。接着,判断这个值是否有一个值为数字的length属性,对于数组将总是得到true,而对于对象来说并非如此。接下来,判断这个值是否包含一个splice方法。对于所有数组来说,这又将得到true。最后,判断length属性是否是可枚举的,对于所有数组来说,将得到false,这是对数组最可靠的测试。
不过,使用下面的方法也能够很好地检测数组类型,并且这种方法显得更加简洁。
var is_array = function(value) {

return Object.prototype.toString.apply(value) === '[object Array]';

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值