ES6学习笔记(二):引用数据类型
Array
新增方法
1.Array.from()
将类数组(dom对象 或 arguments)或set\map对象转换为数组
2.Array.of()
将一组值转换为数组,例如Array.of(3,5,7,9) => [3,5,7,9]
3.Array.prototype.copyWithin()
数字内部复制
4.数组实例的find()和findIndex()
例如[1,2,3].find(n => n > 2) // 3
5.数组实例的fill()
使用给定的值填充数组
6.数组实例的entries(),keys()和values()
keys() 遍历数组key值
values() 遍历数组value值
entries() 遍历数组key和value值
7.数组实例的includes()
检测数组中是否含有某个值,返回一个布尔值
数组的空位
注意与undefined区分
Function
设置参数默认值
参数变量是默认声明的,所以不能用let或const再次声明。
es5:
function doSomething(x){
x = x || 1;
console.log(x);
}
doSomething() // 1
es6:
function doSomething(x = 1){
console.log(x)
}
doSomething() // 1
arguments.length失真的问题
如果设置了默认值,则length失真
length属性的返回值,等于函数的参数个数减去指定了默认值的参数个数。
rest参数也不会计入length属性。
(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2
rest参数
rest参数是一个数组
function push( ...items) {
console.log(items)
}
push(1, 2, 3); // [1,2,3]
注意,rest参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
扩展运算符...
它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。
// ES5的写法
Math.max.apply(null, [14, 3, 77])
// ES6的写法
Math.max(...[14, 3, 77])
// 等同于
Math.max(14, 3, 77);
应用:
1.合并数组 [...arr1,...arr2,...arr3]
2.转换字符串为数组 [...'hello] // [ "h", "e", "l", "l", "o" ]
3.实现了Iterator接口的对象转换为数组(注意与Array.from区别)
箭头函数
使用注意点:
1.this指向定义时的对象,非执行时所在的对象
2.不能使用new命令
3.不能使用arguments、super、new.target,可用rest参数
4.不能使用yield命令
var obj = {
id:42,
foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
}
var id = 21;
obj.foo()// id: 42
以上例子中如果不用箭头函数,则结果会是id:21,因为this指向的window。
箭头函数里面根本没有自己的this,而是引用外层的this。
// ES6
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
// ES5
function foo() {
var _this = this;
setTimeout(function () {
console.log('id:', _this.id);
}, 100);
}
函数绑定
1.语法:
func::obj 等价于 func.bind(obj)
2.传参数写法
func::obj(...arguments) 等价于 func.bind(obj,...arguments)
3.省略写法
::obj.func 等价于 obj::obj.func
尾调用和尾递归优化
函数参数逗号尾
Object
对象简写
1.只写属性名
2.属性名表达式(字符串拼接)
var foo = '111';
var bar = {foo};
console.log(bar); // {foo:'111'}
新方法
1.Object.is(obj1,obj2) // 判断两个对象是否等价
2.Object.assign() // 对象合并,类似于jQuery的$.extend()
应用:为对象添加属性、克隆对象、合并多个对象、为属性添加默认值
浅拷贝:如果源对象某个属性是引用数据类型,则目标对象拷贝后得到的是该引用。
注意:拷贝嵌套的对象,如果属性名相同,则会替换该属性的值而非添加
属性的可枚举性
以下操作会忽略enumerable为false的属性
1.for...in
2.Object.keys()
3.JSON.stringify()
4.Object.assign()
ES6规定,所有Class的原型的方法都是不可枚举的。
属性的遍历
(1)for...in // 遍历自身的和继承的属性(不含Symbol)
(2)Object.keys(obj) // 遍历对象自身属性,并将所有属性返回为一个数组(不含继承和Symbol)
(3)Object.getOwnPropertyNames(obj) // 返回一个数组,遍历对象自身的所有属性(不含Symbol,包括不可枚举的)
(4)Object.getOwnPropertySymbols(obj) // 返回一个数组,包含对象自身的所有Symbol属性
(5)Reflect.ownKeys(obj) // 返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。
属性遍历的次序规则:
首先:数值的属性,按照数字排序。
其次:字符串的属性,按照生成时间排序。
最后:所有属性名为Symbol值的属性,按照生成时间排序。
Object.setPrototypeOf(),Object.getPrototypeOf()
Object.values(),Object.entries()
Object.values(): 遍历对象,返回所有属性的值组成的数组
Object.entries(): 返回一个数组,成员是对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
Object.getOwnPropertyDescriptor和Object.getOwnPropertyDescriptors
ES6学习笔记(二):引用数据类型的更多相关文章
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Java学习笔记二:数据类型II
GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一 Java中的数据类型 Java ...
- Java学习笔记day03_引用数据类型
1.引用数据类型 步骤: 1. 导包 2. 创建引用类型变量 类型 变量名 = new 类型名(); 3. 使用数据类型的功能 变量名.功能名(); 如Scanner类: import jav ...
- ES6学习笔记二
字符串遍历 var str = 'hello'; for(let s of str){console.log(s += ' ')} //h e l l o 字符串查找:添加了include(str,i ...
- ES6学习笔记二:各种扩展
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 1:字符串遍历器 for (let char of str) { // ...
- ES6学习笔记(二)——字符串扩展
相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...
- python学习笔记(二):python数据类型
上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...
- ES6学习笔记(二)
Set 和 Map 数据结构 1.set 基本用法 ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值 Set本身是一个构造函数,用来生成Set数据结构 const s ...
- es6学习笔记二:生成器 Generators
今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性. 为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂.但是,从某种意义上来 ...
随机推荐
- Application Constants
Application: Application类是Android框架中提供的一个类.本身程序员不需要创建它,只需要继承它既可.并在manifest中进行注册. 它给我们提供了一个一般不会被销毁的全局 ...
- FPGA按一下按键,对应端口输出单个脉冲
对于FPGA的verilog语言,,,规定一个变量不能在多个always中被赋值.但是可以在多个alway块中做判断--结合状态机思想 module state(key,led,clk); input ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- 开启Node.js的大门
其实也没什么好说的,简而言之,就是如何配置node.js环境,然后进行开发.博主最近比较堕落,觉得什么事情也没有就不知道想干什么,想融入一些事情又觉得没大神指引,于是自娱自乐开始自己玩node.js, ...
- [Lydsy1805月赛]对称数 BZOJ5361
分析: 这个题,还是蛮有趣的.考虑,如果l,r区间内的所有数出现奇数次,那么[l-1,r]的抑或和等于所得抑或和. 之后怎么维护呢,主席树维护区间抑或和,记得将每个点附上一个ull级别的随机数,之后抑 ...
- 20155306 白皎 免考实践总结——0day漏洞
本次免考实践提纲及链接 第一部分 基础知识 1.1 0day漏洞概述 1.2二进制文件概述 1.3 必备工具 1.4 crack实验 第二部分 漏洞利用 2.1栈溢出利用 2.1.1 系统栈工作原理 ...
- 20155321 《网络攻防》 Exp3 免杀原理与实践
20155321 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 根据实验指导书,杀软有两个方法可以检测出恶意代码.第一种是基于特征码,即先对流行代码特 ...
- idea Cannot Resolve Symbol 问题解决
总结:要多根据有问题的提示来进行百度搜索,这一次我就是搜索了 idea 提示的错误信息 Cannot Resolve Symbol ,才找到的解决方案,所以说出现问题,如果不是很复杂的场景或者原因很多 ...
- idea ssm项目迁移到另一台机器上时出现不能正常启动项目的解决方案
首先右下角提示关联spring文件,关联之,然后启动,发现项目无法启动,然后开始排错 首先从这个日志里发现了这么一条提示信息 然后百度了一下,答案都是说 web.xml 之类的 spring拦截器问题 ...
- 微信小程序之授权 wx.authorize
一. wx.authorize(Object object) 提前向用户发起授权请求.调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口.如果用户之前已 ...