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学习笔记(二):引用数据类型的更多相关文章

  1. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  2. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. Java学习笔记二:数据类型II

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一  Java中的数据类型 Java ...

  4. Java学习笔记day03_引用数据类型

    1.引用数据类型 步骤: 1. 导包   2. 创建引用类型变量 类型 变量名 = new 类型名();   3. 使用数据类型的功能 变量名.功能名(); 如Scanner类: import jav ...

  5. ES6学习笔记二

    字符串遍历 var str = 'hello'; for(let s of str){console.log(s += ' ')} //h e l l o 字符串查找:添加了include(str,i ...

  6. ES6学习笔记二:各种扩展

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7242967.html 一:字符串扩展 1:字符串遍历器 for (let char of str) { // ...

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

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

  8. python学习笔记(二):python数据类型

    上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...

  9. ES6学习笔记(二)

    Set 和 Map 数据结构 1.set 基本用法 ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值 Set本身是一个构造函数,用来生成Set数据结构 const s ...

  10. es6学习笔记二:生成器 Generators

    今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性. 为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂.但是,从某种意义上来 ...

随机推荐

  1. Oracle 解决【ORA-01704:字符串文字太长】

    错误提示:oracle在toad中执行一段sql语句时,出现错误‘ORA-01704:字符串文字太长’.如下图: 原因:一般为包含有对CLOB字段的数据操作.如果CLOB字段的内容非常大的时候,会导致 ...

  2. 模板自定义函数 template function

    sqlite3中的日期默认是UTC,当日期字段的默认值是CURRENT_TIMESTAMP时,这个日期和北京时间CST少了8小时. 网上建议说数据库里用UTC,读取数据时再转换为当地时间. web页面 ...

  3. 经常使用命令 echo、@、call、pause、rem

    经常使用命令 echo.@.call.pause.rem(小技巧:用::取代rem)是批处理文件最经常使用的几个命令,我们就从他们開始学起. 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标 ...

  4. SonarQube6.7.4安装部署

    1.准备工作 https://www.sonarqube.org Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.比如p ...

  5. Mike的农场 BZOJ4177

    分析: 最小割,不选则割的建模题...(然而一开始我当成了费用流,简直丧心病狂...最后想到了最小割...) 对于条件一,直接建一条双向边就可以了,并且不计入sum中,因为这是作为费用的存在,让它跑出 ...

  6. VB6 选择文件夹路径

    '--------------------------------------------------------------------------------------- ' Module : ...

  7. 20155217《网络对抗》Exp07 网络欺诈防范

    20155217<网络对抗>Exp07 网络欺诈防范 实践内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS spoof引导特定访问到冒 ...

  8. CF 961E Tufurama

    JYZdalao上课讲了这道题,觉得很好可做 其实也是一道理解了就水爆了的题目 把题意抽象化,可以发现题目求的满足 i<j a[i]>=j a[j]>=i 的i,j对数.由于i,j顺 ...

  9. Spring的单例模式底层实现学习笔记

    单例模式也属于创建型模式,所谓单例,顾名思义,所指的就是单个实例,也就是说要保证一个类仅有一个实例.单例模式有以下的特点:①单例类只能有一个实例②单例类必须自己创建自己的唯一实例③单例类必须给所有其他 ...

  10. 实战重现隐藏在A标签_blank下的危险漏洞,简略说明noopener的作用

    前几日,在看阮一峰老师的博客文章中,发现了这么一篇 .标题为 <target = "_blank" 的危险性(英文)>.这篇文章同事看过之后因为不理解其中的危险之处,念 ...