《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 安装并启动 ...
随机推荐
- java基础练习 5
import java.util.Scanner; public class Fifth { /*输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组.*/ public static ...
- iOS 电商购物车倒计时时间计算
/** * 倒计时 * * @param endTime 截止的时间戳 * * @return 返回的剩余时间 */ - (NSString*)remainingTimeMethodAction:(l ...
- 深入分析:微信小程序与H5的区别
作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...
- java加解密
换工作中,把以前学的知识,整理整理.能否得到一份好的薪资且满意的工作,然后赢取白富美,走向人生的巅峰,就靠它了.哈哈. 对称加密:DES, AES DES (数据加密算法) : 明文按64位进行分组, ...
- Elasticsearch安装ik中文分词插件(四)
一.IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Lu ...
- 使用Stardict命令行版本sdcv
sdcv命令的常用选项如下: -l:列出安装的词典 -u:指定查词所用的词典 在我的电脑上列出的词典有: Dictionary's name Word count Merrian Webster 10 ...
- GIT 代码管理工具 SourceTree
什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torval ...
- 【锋利的Jquery】读书笔记二
一.jquery选择器 基本选择器 层次选择器 过滤选择器 基本过滤 内容过滤 可见性过滤 属性过滤 子元素过滤 first : 获取单个元素 $("div:first&quo ...
- 《Intel汇编第5版》 汇编调用子过程
一.Call和Ret指令 二.在子过程中需要自己保存可能会修改掉的寄存器值,这里可以使用USES伪指令来生成 三.一个数组求和的汇编例子 TITLE Call a Proc Demo INCLUDE ...
- 关于CSRF的攻击
CSRF攻击的原理: 1.当用户成功登陆网站A时,浏览器纪录本次会话cookie. 2.未退出网站A,点击了恶意网站B上的图片或者其他诱骗信息. 3.恶意网站B上的诱骗信息超链接到了网站A上面,冒充用 ...