ES6 数组、函数、迭代器

数组

数组创建:
Array构造函数的特性:

如果使用Array构造函数传入一个数值型的值,那么数组的长度length属性会被设置为该值;

let items = new Array(2);
console.log(items.length); // 2
console.log(items[0]); // undefined
console.log(items[1]); // undefined

如果传入一个非数值型的值,那么这个值会成为目标数据的唯一项;
如果传入多个值,无论这些值是不是数值型的,都会变为数组的元素。

Array.of()

无论有多少参数,参数是什么类型的,Array.of()方法总会创建一个包含所有参数的数组。

let items = Array.of(2);
console.log(items.length); // 1
console.log(items[0]); // 2

数组遍历:
forEach()
不能中断遍历,没有返回值

let arr = [1, 2, 3];
arr.forEach((item, index, arr) => {
    console.log(item)
})

map()
返回一个新的数组

let arr = [1, 2, 3];
let newArr = arr.map((item, index, arr) => {
    return item * 2;
	}
)
console.log(arr) // [1, 2, 3]
console.log(newArr) // [2, 4, 6]

filter()
可以过滤数组,包含满足条件的数组项,返回一个新数组

let arr = [1, 2, 3];
let newArr = arr.filter((item, index, arr) => {
    return item <= 2;
	}
)
console.log(arr) // [1, 2, 3]
console.log(newArr) // [1, 2]

some()
返回布尔值,如果有一个满足条件的值则返回true

let arr = [1, 2, 3];
let result = arr.some((item, index, arr) => {
    return item < 2;
	}
)
console.log(result) // true

every()
返回布尔值,如果所有数组项都满足条件则返回true

let arr = [1, 2, 3];
let result = arr.every((item, index, arr) => {
    return item < 2;
	}
)
console.log(result) // false

函数

函数的name属性:

1.function fn(){} name为 fn
2.let fn = function (){} name为 fn
3.let fn = function fn1(){} name为 fn1,因为函数名比被赋值的变量权重高
4.let obj = {get firstName(){}, sayName(){}}obj.firstName 为getter函数,所以name为 getfirstNameobj.sayName name为 sayName
5.通过 bind() 创建的函数,name会带有 bound 前缀。fn.bind() name为 bound fn
6.通过 Function() 创建的函数,name为 anonymousnew Function() name为 anonymous

双冒号运算符:

函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。

foo::bar;
// 等同于
bar.bind(foo);

foo::bar(...arguments);
// 等同于
bar.apply(foo, arguments);

迭代器

for-of循环
for-of在循环每次执行时会调用可迭代对象next()方法,并将结果value值保存在一个变量上,循环过程到done变成true时停止。

let values = [1, 2, 3];
for (let num of values) {
console.log(num);
}

访问默认迭代器

Symbol.iterator 来访问对象上的默认迭代器。

let values = [1, 2, 3];
let iterator = values[Symbol.iterator]();
console.log(iterator.next()); // "{ value: 1, done: false }"
console.log(iterator.next()); // "{ value: 2, done: false }"
console.log(iterator.next()); // "{ value: 3, done: false }"
console.log(iterator.next()); // "{ value: undefined, done: true }"

Symbol.iterator 指定了默认迭代器,就可以使用它来检测一个对象是否能进行迭代。

function isIterable(object) {
return typeof object[Symbol.iterator] === "function";
}
console.log(isIterable([1, 2, 3])); // true
console.log(isIterable("Hello")); // true
console.log(isIterable(new Map())); // true
console.log(isIterable(new Set())); // true
console.log(isIterable(new WeakMap())); // false
console.log(isIterable(new WeakSet())); // false

集合的迭代器

entries() :返回一个包含键值对的迭代器;
values() :返回一个包含集合中的值的迭代器;
keys() :返回一个包含集合中的键的迭代器;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值