Js 中的数组
在js 中,数组就是对象,除了可以使用字面量语法[...]来声明数组外,它和其它对象没有什么区别。当创建一个数组[‘a’, ‘b’, ‘c’]时,内部的实现形式如下:
{
length: 3,
0: 'a',
1, 'b',
2, 'c'
}
可以使用Object.assgin 和对象解构的方式来验证一下
Object.assign({}, [1, 2]); // { '0': 1, '1': 2 }
当然,这个对象从Array.prototype 继承了map, push 等常用的数组方法。当对数组进行迭代时,比如使用map,它首先看的是length , 然后再开始从零查找对应的每一个元素或属性,直到length 结束。When performing iterative operations like map the array will internally look at its length and then check itself for any properties within the range starting at zero and ending at length. 你可能使用过下面的语法,但发现不起作用,数组arrayA 依然是空。
let arrayA = new Array(3).map(function() { return 1 }); // not work
console.log(arrayA); // still empty
当使用new Array(3) 创建数组的时候,它并不会创建3个undefined 值,它只是把新创建的数组的length设为了3. 我们可能认为 new Array(3) 的内部实现形式如下:
{
length: 3,
0: undefined,
1: undefined,
2: undefined,
}
其实它的内部实现形式如下
{
length: 3
}
它只有一个length 属性3,但没有实际的3个值。这些没有存在的值称为holes. map 对holes 不起作用。This missing values are calls holes. Method like map don’t work on holes。 所以我们试图创建拥有三个值的数组不起作用。可以使用fill 方法,当对数组进行填充的时候,它不管是不是holes. When filling the array, it doesn’t care if at a given index there’s is a value or a hold.
let arrayA = new Array(3).fill(1); // work
创建holes 的另外一种形式是数组字面量中使用,但不给值。比如[1,2,,,,,,,5].
不过ES6 增加的方法,如for of, Array.from, 都把holes 当作undefined 处理
const a = Array.from([,,,]); // Array of 3 holes created with ES6's Array.from()
for (const val of a) {
alert(val === undefined);
}
数组的toString() 和valueOf() 方法返回相同的值,都是字符串。数组的每一项用,连接
let colors = ["red", "blue", "green"]; // creates an array with three strings
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // red,blue,green
Js 中的数组的更多相关文章
- js中的数组
上网查了一下,js中的数组包含的内容还真不少.先给出两个学习的链接: w3school链接:http://www.w3school.com.cn/js/js_obj_array.asp 博客园链接:h ...
- JS中Array数组的三大属性用法
原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...
- JS中对数组元素进行增删改移
在js中对数组元素进行增删改移,简单总结了一下方法: 方法 说明 实例 push( ); 在原来数组中的元素最后面添加元素 arr.push("再见58"); unshift( ) ...
- js中的数组遍历
js中的数组遍历是项目中经常用到的,在这里将几种方法做个对比. ! for循环:使用评率最高,也是最基本的一种遍历方式. let arr = ['a','b','c','d','e']; for (l ...
- 遍历js中的数组
可以使用js中的for循环,或者forEach方法:也可以使用Ext中的方法遍历js中的数组 代码如下: /** * 遍历数组 */ var arr = ['越南', '新加坡', '美国', '俄罗 ...
- java:JavaScript3(innerHTML,post和get,单选框,多选框,下拉列表值得获取,JS中的数组,JS中的正则)
1.innerHTML用户登录验证: <!DOCTYPE> <html> <head> <meta charset="UTF-8"> ...
- JS中的数组复制问题
JS中的数组复制问题 前言 首先提到复制,也就是拷贝问题,就必须要明确浅拷贝和深拷贝. 浅拷贝:B由A复制而来,改变B的内容,A也改变 深拷贝:B由A复制而来,改变B的内容,A的内容不会改变 总的来说 ...
- js 中关联数组
以前都不知道这种写法叫做关联数组. 何为关联数组呢.通常的数组在填充时会隐式或者显示指定数组下标,但JS中数组可以以名字的形式为元素赋值,这就形成了关联数组. 例子 var p={ name:'dai ...
- js中删除数组中某一项的方法
1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...
- JS中遍历数组、对象的方式
1.标准的for循环遍历数组 //不打印自定义属性和继承属性 var array = [1,2,3]; for (var i = 0; i < array.length; i++) { cons ...
随机推荐
- Golang、python中MD5、SHA512、base64编码等
在GO中处理的话,比较方便. func main() { fmt.Println(md5Str("woGo")) fmt.Println(sha512Str("woGo& ...
- Pageoffice6 实现后台批量生成Word文档
在实际项目开发中经常会遇到后台动态生成文档的需求,目前网上有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案对比". 如果一次只生成一份 ...
- 阿里DataX极简教程
目录 简介 工作流程 核心架构 核心模块介绍 DataX调度流程 支持的数据 实践 下载 环境 执行流程 引用 简介 DataX是一个数据同步工具,可以将数据从一个地方读取出来并以极快的速度写入另外一 ...
- AIRIOT物联网低代码平台如何配置欧姆龙omron驱动?
数据采集与控制是物联网的核心能力之一,AIRIOT物联网低代码平台提供了丰富的驱动,兼容了市面上95%以上的传感器.控制器及数据采集设备等,并且在持续增加中,能够快速.便捷地实现数据采集与控制功能. ...
- Django自定义模板标签与过滤器
title: Django自定义模板标签与过滤器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端开发 tags: ...
- docker安装MySQL8.0.35主从复制(实战保姆级)
很久没有记录了,今天有时间就记录一下最近安装遇到的问题 liunx安装docker这个是前提,就不多过述 1 准备两台服务器 10.104.13.139 10.104.13.140 2 确保liunx ...
- 阿里巴巴 MySQL 数据库之 SQL 语句规约 (三)
SQL 语句规约 强制部分 [强制] 不要使用 count(列名) 或 count(常量) 来替代 count(*),count(*) 是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NU ...
- jQuery实现简单的模态框
<!-- jquery模态框 --> <!DOCTYPE html> <html lang="en"> <head> <met ...
- ModelScope初体验
使用环境:windows 11 前置条件:已安装 anaconda 参考文档:环境安装 step1:新建一个 conda 环境,命名为 modelscope conda create -n model ...
- mac m1使用docker安装oracle
mac m1使用docker安装oracle数据库 本学期开始学习数据库原理,老师课上讲到课堂作业使用的是oracle 11g,然而我去官网却发现只有Windows和Linux版本的,并没有发现mac ...