记住Javascript里没有“数组”
忘掉一切吧,骚年...
一切都是对象:书中还细分了下简单类型和对象类型
基本类型:typeof xxx => "number"数字,"boolean"布尔,"string"字符串,还有两个特殊的成员(null,undefined)
剩下的其他的是对象(有点像c#的引用类型)

不是还有个数组吗?
아니오.那个还不算真正的数组思密达。只能算是个“类数组”的假冒货,容我细细道来:
var arr;//undefined
arr=[];//typeof arr=>"object",arr.length==0
这个对象比较特殊于普通Object的一点是有个length属性

[]-这个操作符当然啦不是“数组”的专属啦
可以var b={hello:'world'};
如访问对象属性值: b['hello']   //注意这里不能b[hello]直接,意义不一样,这里hello是个表达式(单个的就是变量啦),首先会计算这个表达式(一发现变量hello未声明就报错了)。

可以实验:

b[hello]='world';//ReferenceError: hello is not defined

var hello;

b[hello]='world';//这时hello声明了,值为undefined,转换为字符串'undefined'后作为“数组”的属性名

所以console.info(b[undefined]);//会得到'world'

对于使用'hello'作为属性名的可以var k='hello';alert(b[k]);这样就可以了。所以两者意义是不一样的。

既然数组也是对象,所以也可以使用[]操作符

//先设置几个“属性”,需要注意的是对数组来说,设置属性时,如果这个属性看上去是个非负整数的话,那么如果比当前length值大的话会加一并更新给数组的length属性,数组不要求“数字索引”(不是索引,同c#之类的不太一样)连续
arr[999]='哈哈哈';//999>arr.length(==0),所以arr.length=999+1
//但实际的arr来说不存在0-998这些键,arr看上去是这样的{999:'哈哈哈',length:1000}

自行测试: (判断是不是一个对象的属性名,可以用in操作符)

999 in arr   ===>返回 true
998 in arr  ====>返回 false

[]操作会计算它的表达式,并调用toString()转换一个字符串作为数组对象的属性名:

arr['']=‘我是空’;//这也可以的,''不像整数不更新Length

a['10']=123;//10比1000小,length不更新

a[true]=1;//'true'做键

a[1/0]='无穷';//1/0=>'Infinity'

...都是toString()....

length也可以作为左值,可以修改的:

arr.length=10000;//改大了,其实只是修改了length属性值而已,对元素没什么影响
//好比 {....,length:10000}
并不是前面多了N多个undefine,对于浏览器插件显示的有误,如chrome的控制台

如果设置的比当前length值小,会截断:
长得比length小的“类整数"键会抹掉,如"类数组{0:0,1:1,2:2,'true':true,8:'8',10:10,'':'empty',length:11}(注意:这里为了表达,故意用了个普通Object的形式~~)
如果length设置为7,则只有小于7的“数字”属性名保留 {0:0,1:1,2:2,'true':true,'':'empty',length:11}

当然了数组有个简洁的初始化语法 var a=[1,2,'true',undefined,false];

上面的再提示一下:
var a=[];
a.length=5;

var b=[undefined, undefined, undefined, undefined, undefined];

试试 3 in a 和 3 in b就知道区别了 

还有关于”删除元素“提一下:

var a=[1,2,3];

delete a[1]; //1 in a ==false,会留下空档

a[1]=undefined;不一样  // 1 in a ==true

关于Javascript"数组"那点事儿的更多相关文章

  1. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  2. Javascript数组操作(转)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  3. JavaScript 数组

    JavaScript 数组 简介:数组是值的有序集合,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一:创建数组 ...

  4. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  5. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  6. JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

    JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性 ...

  7. 【读书笔记】-- JavaScript数组

    数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ...

  8. 什么才是正确的javascript数组检测方式

    前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具——typeof ...

  9. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

随机推荐

  1. CENTOS WDCP 安装及安全设置教程

    1.WDCP 安装 源码安装 (ssh登录服务器,执行如下操作即可,需root用户身份安装) wget  http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz t ...

  2. Maven中settings.xml的配置项说明

    本文部分引用自:http://haohaoxuexi.iteye.com/blog/1827778 在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息.这个文件会存在于 ...

  3. Linux(CentOS)安装rar和unrar以及rar和unrar命令的使用

    可以参考此篇博文.   http://www.cnblogs.com/linjiqin/archive/2013/03/24/2979736.html 不过我按照其步骤手动安装Linux的rar文件执 ...

  4. ubuntu共享文件夹给virtualbox

    在ubuntu或者linuxmint等linux系统下安装了virtualbox,可以通过共享文件夹的方式,把文件夹共享给virtualbox下的虚拟机系统,我这里的虚拟机系统是win7,共享过程如下 ...

  5. JMS - Exceptions

    The JMSException JMS defines JMSException as the root class for exceptions thrown by JMS methods. JM ...

  6. Linux 命令 - printenv: 打印全部或部分环境信息

    命令格式 printenv [OPTION]... [VARIABLE]... 命令参数 -0, --null 以空字符而非换行符结束每一输出行. --help 显示帮助信息. --version 显 ...

  7. C# 4 dynamic 动态对象 动态类型转换

    public class User { //使用省缺参数,一般不需要再为多态做各种静态重载了 public User( string name = "anonym", string ...

  8. C# 日期减法

    public class DateExample { public static void Main() { DateTime dt1 = new DateTime(2012, 7, 16); Dat ...

  9. PullToRefreshListView手动刷新问题

    1.第一次进入界面刷新无效,需要延时刷新 new Handler().postDelayed(new Runnable() { @Override public void run() { // TOD ...

  10. oracle trunc 函数处理日期格式

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  --显示当前时间 2011-12-29 16:24:34 select trun ...