类数组 / 伪数组
Array.from()
Array.of()
copyWithin()
fill()
includes()
 
类数组、伪数组例子:
let divs = document.getElementsByTagName('div');
console.log(divs); // HTMLCollection let divs2 = document.getElementsByClassName('abc');
console.log(divs2); // HTMLCollection let divs3 = document.querySelectorAll('.xxx');
console.log(divs3); // NodeList // 我们使用instanceof 验证这些是伪数组
console.log(divs instanceof Array); // false
console.log(divs2 instanceof Array); // false
console.log(divs3 instanceof Array); // false

HTMLCollection、NodeList等类型都是伪数组。

这里伪数组不能使用push这种数组原有的方法,因为这些类型没有定义push方法。
 
使用slice将类数组转换成真正的数组:
let arr = Array.prototype.slice.call(divs)
console.log(arr);

  

arguments也是伪数组:
function foo() {
console.log(arguments);
}
foo(1, 2, 3)

  

伪数组必要条件:
1、下标索引必须是0为开头的连续正整数数集
2、必须要有length属性,默认值为0
 
我们使用对象来定义一个伪数组:
let arrayLike = {
0: 'lala',
1: 'haha',
2: 'hehe',
length: 3
}

  


使用ES6方式将伪数组转换成数组:from

let arr1 = Array.from(arrayLike)
arr1.push('lolo')
console.log(arr1);

  


使用Array构造器传参生成数组,会因为传参数量不同而参数不同的结果,如下代码:
let a1 = new Array(1, 2)
let a2 = new Array(3)
console.log(a1); // [1,2]
console.log(a2); // 长度为3的空数组

  

为了解决上面构造器参数问题,使用of方法解决:
of 方法可以拼装任何类型变成一个数组
let a3 = Array.of(1, 2)
let a4 = Array.of(3)
console.log(a3); // [1,2]
console.log(a4); // [3]

  


copyWithin:从数组的指定位置拷贝元素到数组的另一个指定位置中
参数:
target:必需。复制到指定目标索引位置。
start:可选。元素复制的起始位置。
end:可选。停止复制的索引位置 (默认为 array.length)。如果为负值,表示倒数。
let c1 = [1, 2, 3, 4, 5, 6]
console.log(c1.copyWithin(1, 3));
// 根据参数定义,将索引3的位置到末位的元素,替换从索引1开始的位置。

  


fill,填充数组:
参数:
value:必需。填充的值。
start:可选。开始填充位置。
end:可选。停止填充位置 (默认为 array.length)
 
填充abc字符串给长度为3的数组:
let f1 = new Array(3).fill('abc')
console.log(f1);

  

fill也可以做数组元素值的替换:
let f2 = [1, 2, 3, 4, 5]
f2.fill('abc', 1, 3)
console.log(f2); // [1, "abc", "abc", 4, 5]
f2.fill('n')
console.log(f2); // ["n", "n", "n", "n", "n"]

  


includes,ES6用来判断数组里面是否包含指定元素:
 
ES5中,indexOf有什么弊端?
let i1 = [1, 2, 3, NaN]
console.log(i1.indexOf(NaN)); // -1

造成上面的原因是因为NaN不等于NaN

console.log(NaN == NaN) // 输出false
 
我们来使用includes来判断:
console.log(i1.includes(2)); // true
console.log(i1.includes(NaN)); // true
console.log(i1.includes(6)); // false
 
由此可得includes可以实现NaN的正确判断。
 
 

ES6-11学习笔记--数组的扩展的更多相关文章

  1. js-ES6学习笔记-数组的扩展

    1.Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map). 实际应用中 ...

  2. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  3. JavaScript:学习笔记(8)——对象扩展运算符

    JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...

  4. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  5. ES6学习笔记(二)——字符串扩展

    相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...

  6. ES6 学习6 数组的扩展

    本章学习要点: 扩展运算符 Array.from() Array.of() 数组实例的 copyWithin() 数组实例的 find() 和 findIndex() 数组实例的 fill() 数组实 ...

  7. JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)

    一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...

  8. js-ES6学习笔记-函数的扩展

    1.ES6函数参数的默认值,直接写在参数定义的后面.参数变量是默认声明的,所以不能用let或const再次声明. function Point(x = 0, y = 0) { this.x = x; ...

  9. ES6(阮一峰) 数组的扩展

    1.扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(1, ...[2, 3, 4], 5) // ...

随机推荐

  1. 计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验)

    计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验) 前言:本博客包含Windows10下安装wget.Wireshark. 一些有用的 ...

  2. 研发管理平台DevOps使用流程

    研发管理平台DevOps使用流程:一.注册开发者账号二.登录平台三.点击:我的项目-内部项目三.点击"发布内部项目",创建项目五.进入项目六.研发管理平台研发管理平台的功能包括:可 ...

  3. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  4. m3u8文件合并处理

    m3u8文件合并处理 简介 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码."M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP ...

  5. (九)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4-简单配置

    一.简介 IdentityServer4 是用于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架,通过中间件的方式集成.JWT(json web token) ...

  6. 使用python自动发放员工工资条到个人邮箱

    人力资源部每个月发工资条,以前靠人工手动一条一条的复制,200多号员工,差不多需要耗费一天时间. 用python写个脚本,分分钟的事情就可以全部发送完. 我这边工资表如下图 姓名在C列,邮箱在B列. ...

  7. django之model,crm操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  8. 一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点

    作者 | 扬少 背景 目前,业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题.本文首先会对这些普遍的发布策略进行简单的原理解析,最后结合阿里云的云原生网关对这些发布策略进行 ...

  9. hdu5197 DZY Loves Orzing(FFT+分治)

    hdu5197 DZY Loves Orzing(FFT+分治) hdu 题目描述:一个n*n的矩阵里填入1~n^2的数,要求每一排从前往后能看到a[i]个数(类似于身高阻挡视线那种),求方案数. 思 ...

  10. CF1485X Codeforces Round #701

    D Multiples and Power Differences (构造) 题目大意:给一个n*m的矩阵a,a[i][j]在1到16之间.现在要构造矩阵b,需要满足如下条件: 1.b[i][j]在1 ...