记住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. oracle 排序

    1.ORDER BY 中关于NULL的处理 缺省处理,Oracle在Order by 时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前. 当然,你也可以使用nulls f ...

  2. ZOJ 3209 Treasure Map (Dancing Links)

    Treasure Map Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit S ...

  3. 关于Linux测试题

    Linux 测试题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是 目录 . 3. ...

  4. linux信息查找

    问题: 1. 当使用一台linux机器的时候,常常需要确认当前所用操作系统的版本信息,内核信息等, 操作系统的版本信息可以通过以下命令完成,比如:lsb_release -a:cat /etc/iss ...

  5. css3 calc():css简单的数学运算-加减乘除

    css3 calc():css简单的数学运算–加减乘除 多好的东西啊,不用js,一个css就解决了. .box{ border:1px solid #ddd; width:calc(100% - 10 ...

  6. MYSQL 排行类的相关SQL写法,仅供参考

    SELECT * FROM () )) b

  7. Error This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. T

    错误提示: Severity Code Description Project File Line Suppression StateError This project references NuG ...

  8. windows server 2008下装SQL 2008R2x64

    1. 在windows server 2008下装SQL 2008出现 This SQL Server Setup media is not supported on a X64 system 使用虚 ...

  9. SecureCRT连接虚拟机中的Linux系统(Ubuntu)

    最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...

  10. Memcached学习(二)

    4.协议简介 Memcached服务与各客户端间通过Tcp链接通讯(也可通过Udp链接). 各客户端间与服务间不需要发送特别的命令关闭链接,只要在不需要的时候直接关闭链接即可.建议客户端与服务间保持长 ...