javascript 有趣而诡异的数组

 更新时间:2009年04月06日 00:59:32   作者:  
javascript 有趣而诡异的数组
年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:
复制代码 代码如下:

var associative_array = new Array();
associative_array["one"] = "1";
associative_array["two"] = "2";
associative_array["three"] = "3";
if(associative_array.length > 0)
{ // to do}

会发现 associative_array.length 始终等于 0,当时有点迷惑,后来才知道这就像大家认为 IE 中支持 CSS 属性 display:inline-block 一样,纯属巧合和误解。

实际上(引自《JavaScript “Associative Arrays” Considered Harmful》):

JavaScript arrays (which are meant to be numeric) are often used to hold key/value pairs. This is bad practice. Object should be used instead.

//大意:数组只支持数字的,键值对应使用于对象上。

There is no way to specify string keys in an array constructor. //在数组构造函数中无法定义字符串键值
There is no way to specify string keys in an array literal. //在数组字面量中无法定义字符串键值
Array.length does not count them as items. // Array.length 不会计算字符串键值
进一步窥探数组:

1、数组可以根据所赋的值自动调整大小
复制代码 代码如下:

var ar = [];
ar[2] = 1;
alert(ar.length)

发现这个数组的长度为 3,就像一个经过初始化的数组一样。所有没有赋值的数组对象,都将被定义为 undefined 。

扩展阅读:

2、可使用 “The Miller Device” 方法来判断是否是数组

复制代码 代码如下:

function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]';}

“The Miller Device” 的妙用不仅仅在于判断数组:
复制代码 代码如下:

var is = {
types : ["Array","RegExp","Date","Number","String","Object"]
};

for(var i=0,c;c=is.types[i++];){
is[c] = (function(type){
return function(obj){
return Object.prototype.toString.call(obj) == “[object "+type+"]“;
}
})(c);
}

扩展阅读:

相关文章

  • javascript onmouseout 解决办法

    javascript onmouseout 解决办法

    最近在做一个简单的鼠标onmouseover时显示层(层里面有多个链接文字),onmouseout 时隐藏层的功能时,发现有诸多问题.
    2010-07-07
  • 微信小程序自定义多列选择器使用

    微信小程序自定义多列选择器使用

    这篇文章主要为大家详细介绍了微信小程序自定义多列选择器使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 详解JavaScript 的执行机制

    详解JavaScript 的执行机制

    这篇文章主要介绍了JavaScript 的执行机制,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
    2020-09-09
  • 如何自定义微信小程序tabbar上边框的颜色

    如何自定义微信小程序tabbar上边框的颜色

    这篇文章主要介绍了如何自定义微信小程序tabbar上边框的颜色,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • electron如何使用typescript

    electron如何使用typescript

    引入 TypeScript 到 Electron 项目可以帮助你捕捉错误并在编写代码时提供更好的自动完成和文档,这篇文章主要介绍了electron使用typescript的步骤,需要的朋友可以参考下
    2024-04-04
  • 详解async/await 异步应用的常用场景

    详解async/await 异步应用的常用场景

    这篇文章主要介绍了详解async/await 异步应用的常用场景,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • js修改table中Td的值(定义td的单击事件)

    js修改table中Td的值(定义td的单击事件)

    单击事件,将Td内容更新为一个Div,其中装载了一个Text,用于用户输入新的Td的值,一个确定按钮,一个取消按钮,用于保存或取消用户的输入内容
    2013-01-01
  • Bootstrap所支持的表单控件实例详解

    Bootstrap所支持的表单控件实例详解

    Bootstrap 支持最常见的表单控件,主要是 input、textarea、checkbox、radio 和 select。本文通过实例代码给大家讲解Bootstrap所支持的表单控件,感兴趣的朋友一起学习吧
    2016-05-05
  • JS数组Object.keys()方法的使用示例

    JS数组Object.keys()方法的使用示例

    这篇文章主要介绍了JS数组Object.keys()方法的使用,结合实例形式分析了javascript使用Object.keys()方法进行数组遍历、读取相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • JavaScript+html实现前端页面随机二维码验证

    JavaScript+html实现前端页面随机二维码验证

    这篇文章主要为大家详细介绍了JavaScript+html实现前端页面随机二维码验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论