《JS权威指南学习总结--7.10 数组类型》
内容要点:
一.数组类型
判断它是否为数组通常非常有用。在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 数组类型》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 安装oracle11数据库时,先决条件都失败怎么处理?
安装oracle11数据库时,先决条件都失败怎么处理?
- git(安装)配置
安装: git安装程序下载:https://git-scm.com/. 配置: $ git config --global user.name "Your Name" $ git ...
- Python学习--09 模块
模块让我们能够有逻辑地组织Python代码段.把相关的代码分配到一个 模块里能让我们的代码更好用,更易懂. 导入模块 Python使用import语句导入模块.语法: # 形式一:导入模块 impor ...
- sass---Sass混合宏、继承、占位符
混合宏-声明混合宏如果你的整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的.但当你的样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无 ...
- LintCode ---- 刷题总结
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 基本:两重for循 ...
- MiniMetro Items
圈代表居民区三角写字楼等工作区方块是商业区钻石是金融中心五角星是政府 十字是医院 扁扁的旅游景区
- ssh中的 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
这个错误我整理了 半天才发现问题的存在. 尝试了网上的很多办法,但是最后都没有达到效果. 包括这两种: 第一种: web.xml种的配置 <filter> <filter-name ...
- Openjudge-NOI题库-旅行-数论
题目描述 Description 转眼毕业了,曾经朝夕相处的同学们不得不都各奔东西,大家都去了不同的城市开始新的生活.在各自城市居住了一段时间后,他们都感到了一些厌倦,想去看看其他人的生活究竟如何,于 ...
- gimagex 2.0.17 汉化版
软件名称: gimagex 2.0.17 汉化版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.31MB 图片预览: 软件简介: gimagex 2. ...
- nginx在window上无法启动的问题
内容列表: 简要介绍 下载安装 配置测试 一.简要介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP ...