css有趣而诡异的数组

作者:blank 来源:怿飞’s Blog 时间:2009-02-04 16:06:00 

年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:

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);
}

扩展阅读:

标签:数组,IE,数字,CSS
0
投稿

猜你喜欢

  • Python特效之文字成像方法详解

    2021-08-09 09:34:06
  • MySQL使用select语句查询指定表中指定列(字段)的数据

    2024-01-26 07:51:49
  • GoFrame错误处理常用方法及错误码使用示例

    2024-04-25 15:30:35
  • python+django快速实现文件上传

    2021-03-12 19:07:38
  • Python pytest.main()运行测试用例

    2023-08-18 02:57:52
  • PHP实现抓取HTTPS内容

    2023-11-14 12:45:14
  • MSSQL数据库占用内存过大造成服务器死机问题的解决方法

    2024-01-18 20:20:09
  • Micropython固件使用Pico刷固件并配置VsCode开发环境的方法

    2022-09-21 16:22:14
  • Python中pandas dataframe删除一行或一列:drop函数详解

    2021-07-09 16:46:47
  • python实现动态规划算法的示例代码

    2023-03-03 09:43:22
  • Python基于checksum计算文件是否相同的方法

    2022-11-08 20:30:48
  • Python时间获取及转换知识汇总

    2023-08-02 12:17:08
  • Sqlserver事务备份和还原的实例代码(必看)

    2024-01-23 18:44:14
  • MySQL 5数据库连接超时问题

    2009-12-29 10:23:00
  • PHP json_encode中文乱码解决方法

    2023-07-12 20:20:14
  • pycharm软件实现设置自动保存操作

    2022-09-01 00:02:15
  • mysql主键id的生成方式(自增、唯一不规则)

    2024-01-14 20:20:27
  • 一文带你重温一下Python的对象模型

    2022-09-15 15:52:52
  • FCKEDITOR 的高级功能和常见问题的解决方法

    2023-12-16 16:07:13
  • Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决

    2023-04-21 05:52:45
  • asp之家 网络编程 m.aspxhome.com