读《ECMAScript6 入门》记6-10章

6.数组的扩展

6.1Array.from()

其用于将两类对象转换为真正的数组:类似数组的对象和可遍历的对象

例:let ps = document.querySelectAll('p');

Array.from(ps).forEach(function(p){

console.log(p);

});

还可以接受第二个参数,用来对每个元素进行处理。

例:Array.from(arrayLike,x=>x*x);

6.2Array.of()

用于将一组值转换为数组。

Array.of(3,11,8); //[3, 11, 8]

6.3数组实例的find()和findIndex()

用于找出第一个符合条件的数组元素。参数为回调函数

例:[1,5,15,13].find(function(value,index,arr){

return > 9;

});

6.4数组实例的fill()

使用给定值填充一个数组。

例:['a','b','c'].fill(7); //[7,7,7]

6.5数组实例的entires(),keys(),values()

用于遍历数组。

keys()是对键名的遍历,values()是对键值的遍历,entires是对键值对的遍历。

例:for(let index of ['a','b'].keys(){

console.log(index);

}

// 0

// 1

6.6数组推导

例:var years = [1954,1974,1990,2006,2010,2014];

[for (year of years ) if (year ? 2000) year];//[2006,2010,2014]

6.7Array.observe(),Array.unobserve()

用于监听数组的变化,指定回调函数。

7.对象的扩展

7.1Object.is()

用来比较两个值是否严格相等。

例:Object.is(+0,-0); //false

Object.is(NaN,NaN); //true

7.2Object.assign()

用于将源对象的所有可枚举属性,复制到目标对象。

例:var target = { a:1 };

var source1 = {b:2};

var source2 = {c:3};

Object.assign(target,source1,source2);

target //{a:1,b:2,c:3}

//若属性有同名,则后面的会覆盖前面的

7.3__proto__属性,Object.setPrototypeOf(),Objcet.getPrototypeOf()

7.4增强的对象写法

例:var Person = {

name: '张三',

birth, //等同于birth:birth

hello(){ //等同于hello:function()...

console.log('我的名字是',)

}

}

7.5属性名表达式

ES6允许定义对象时用表达式作为对象的属性名。

例:var suffix = "word";

var a = {

["first" + suffix]:"hello",

["last" + suffix]: "world"

};

a["first word"]; //"hello"

a["last word"];//"world"

7.6Symbol

var mySymbol = Symbol('Test');

mySymbol.name  //Test

typeof mySymbol  //"symbol"

7.7Proxy

在目标对象之前,架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,可以被过滤和改写。

例:var proxy = new Proxy({},{

get:function(target,property){

return 35;

}

});

proxy.time //35

proxy.name //35

proxy.title//35

7.8Object.observe(),Objec.unobserve();

用来监听对象的变化

例:var = {};

function observer(changes){

changes.forEach(function(change){

console.log('发生变动的属性:'+ change.name);

console.log('变动前的值:'+ change.oldValue);

console.log('变动后的值:'+ change.object[change.name]);

console.log('变动类型:'+ change.type);

});

}

Object.observe(o,observer);

8.函数的扩展

8.1函数参数的默认值

ES6允许为函数的参数设置默认值。

例:function Point(x=0, y = 0) {

this.x = x;

this.y = y;

}

var p = new Point();

// p = {x:0,y:0}

8.2rest参数

例:function add(...values){

let sum = 0;

for(var val of values){

sum +=val;

}

return sum;

}

add(2,5,3) //10

8.3 扩展运算符

扩展运算符是三个点(...)。

8.4箭头函数

ES6允许使用“箭头”(=>)定义函数。

var f =  v =>v;

等同于

var f = function(v) {

return v;

}

9.Set和Map数据结构

9.1Set

类似于数组,只不过其成员值都是唯一的,没有重复的值。

例:var s = new Set();

[2,3,4,5,2,2].map(x=>s.add(x));

for(i of s) {console.log(i) }

// 2 3 4 5

9.2Map

类似于对象,也是键值对的集合,但“键”的范围不限于字符串,对象也可以当作键。

例:var m = new Map();

o = {p:"Hello World"};

m.set(o,"content");

console.log(m.get(o));

Map的属性和方法

size:返回成员总数。

set(key,value):设置一个键值对。

get(key):读取一个键。

has(key):返回一个布尔值,表示某个键是否在Map结构中。

delete(key):删除某个键。

clear():清除所有成员。

遍历

keys():返回键名的遍历器。

values():返回键值的

entires():返回所有成员的遍历器。

9.3WeakMap

结构与Map结构基本类似,唯一的区别是它只接受对象作为键名,不接受原始类型的值作为键名。

设计:当对象被回收后,WeakMap自动移除对应的键值对。此结构有助于防止内存泄漏。

10.lterator和for...of 循环

遍历器(Iteraor)是一种协议,任何对象只要部署这个协议,就可以完成遍历操作。

主要作用:为遍历对象的属性提供统一的接口;使对象的属性能够按次序排列。

例:function makeIterator(array){

var nextIndex = 9;

return {

next:function() {

return nextIndex < array.length ? {value: array[nextIndex++], done: false} : {value: undefined, done: true};

}

}

}

var it = makeIterator(['a','b']);

it.next().value // 'a'

it.next().value //'b'

it.next().done //true

10.2for... of 循环

一个对象只要部署了next方法,就被视为具有iterator接口,就可以用for...of 循环遍历它的值。

例:for(var n of it){

if(n >5){

break;

}

console.log(n);

}

//1 2 3 4 5









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值