内容要点:

一.数组类型

判断它是否为数组通常非常有用。在ES5中,可以使用Array.isArray()函数来做这件事情:

Array.isArray([]); //=>true

Array.isArray({}); //=>false

二.类数组对象

JS数组的有一些特性是其他对象所没有的:

1.当有新的元素添加到列表中时,自动更新length属性。

2.设置length为一个较小值将截断数组。

3.从Array.prototype中继承一些有用的方法。

4.其类属性为"Array".

这些特性让JS数组和常规的对象有明显的区别。但是它们不是定义数组的本质特性。

一种常常完全合理的看法把拥有一个数值length属性和对应非负整数属性的对象看做一种类型的数组。

实践中这些"类数组"对象实际上偶尔出现,虽然不能在它们之上直接调用数组方法或者期望length属性有什么特殊的行为,但仍然可以用针对真正数组遍历的代码来遍历它们。

结论就是很多数组算法针对类数组对象工作得很好,就像针对真正的数组一样。

下面一个函数可以用来检测类数组对象:

//判定o是否是一个类数组对象

//字符串和函数有length属性,但是它们可以用typeof检测将其排除。在客户端JS中,DOM文本节点也可以有length属性,需要用额外判断o.nodeType!=3将其排除

function isArrayLike(o){

if(o &&            //o非null、undefined等

typeof o === "object" &&  //o是对象

isFinite(o.length) &&  //o.length是有限数组

o.length>=0 &&       //o.length为非负数

o.length===Math.floor(o.length) &&  //o.length是整数

o.length<4294967296)       //o.length< 2^23

return true;              // o是类数组对象

else

return false;       //否则它不是

}

三.作为数组的字符串

在ES5中,字符串的行为类似于只读的数组。可以使用charAt()方法来访问单个的字符,还可以使用方括号:

var s = test;

s.charAt(0) //=> "t"

s[1]    //=> "e"   当然,针对字符串的typeof操作符仍然返回 "string",但是如果给Array.isArray()传递字符串,它将返回false。

可索引的字符串的最大的好处就是简单,用方括号代替了charAt()调用,这样更加简洁、可读并且可能更高效。

不仅如此,字符串的行为类似于数组的事实使得通用的数组方法可以应用到字符串上,

例如:

s = "Javascript"

Array.prototype.join.call(s,"")  //=> "J a v a s c r i p t"

Array.prototype.filter.call(s,                     //过滤字符串中的字符

function(x){

return x.match(/[^aeiou]/);            //只匹配非元音字母

}).join("")                                             //=> "Jvsrpt"

《JS权威指南学习总结--7.10 数组类型》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Matlab最新的官方文档中文翻译

    文章翻译的是Matlab最新的官方文档R2016b,可能后续如果我还有时间会继续翻译,希望能够帮到大家,翻译的不好请大家不要吐槽. Matlab官方文档地址:http://cn.mathworks.c ...

  2. [HMLY]10.深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用

    前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如Retain Circle的问题. 目录 1.Retain ...

  3. bootstrap 混合标签

    <html lang="zh_cn"> <head> <meta charset="utf-8"> <meta htt ...

  4. Vultr新加坡机房速度怎么样?值得购买吗?最新评测!

    2016年9月,Vultr vps开通了新加坡Singapore机房线路.与知名的竞争对手Digitalocean和Linode一样,新加坡机房对亚洲速度友好,是讨用户欢心的一个进步. 但是,vult ...

  5. mysql 查看数据库中所有表的记录数

    use information_schema; SELECT DISTINCT t.table_name, t.engine '表引擎', t.table_rowsFROM TABLES tWHERE ...

  6. Tarjan算法详解

    Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...

  7. openstack私有云布署实践【17 配置文件部份说明】

    Nova部份 cpu_allocation_ratio = 4.0 物理 CPU 超售比例,默认是 16 倍,超线程也算作一个物理 CPU,需要根据具体负载和物理 CPU 能力进行综合判断后确定具体的 ...

  8. openstack私有云布署实践【11.1 计算nova - compute节点配置(科兴环境)】

    这里我只使用kxcompute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysf ...

  9. 日期的本质是double

    日期的本质是double,在多语种时用起来更方便.

  10. jar中没有主清单属性

    在导出jar时指定主类位置 或手动配置jar包中的MANIFEST.MF文件: 添加Main-Class: gui 参考: JAVA环境变量 CLASSPATH .;%JAVA_HOME%\lib\d ...