前言
ES6新增了大量的api用于处理字符串,数组和对象等数据,本篇将对一些便利的api进行介绍。
字符串api
当我们需要查看一个字符串中是否包含另一个子串时,常使用indexOf方法。ES6又新增了几个新方法。
includes
1 2 3 4
| let str = 'hello world!';
str.includes('w'); str.includes('ein');
|
检验一个字符串中是否包含一个子串,返回Bool值。
startsWith
1 2
| str.startsWith('hel'); str.startsWith('whel');
|
检测一个字符串是否以特定子串开始,返回Bool值。
endsWith
1 2
| str.endsWith('world!'); str.endsWith('world');
|
检测一个字符串是否以特定子串结束,返回Bool值
- 这三个方法都接收第二个参数,表示开始比对的位置。endsWith例外,endsWith中第二个参数,表示对前n个字符进行检测。
1 2 3
| str.includes('hello', 6); str.startsWith('hello', 6); str.endsWith('hello', 5);
|
padStart
1 2 3 4 5 6
| 'ein'.padStart(5, 'my'); 'ein'.padStart(10, 'my');
'ein'.padStart(2, 'my'); 'ein'.padStart(5, 'my dear '); 'ein'.padStatr(5);
|
- padStart()用于字符串头部补全,接收两个参数,第一个参数表示字符串最小长度,第二个参数表示补全的字符串。
- 如果原字符串长度等于或大于指定的最小长度(第一个参数),则返回字符串。
- 如果用于补全的字符串和原字符串长度超过了指定的最小长度(第一个参数),则会截取补全字符串。
- 如果省去第二个参数,则使用空格进行补全。
padEnd
1 2 3
| 'ein'.padEnd(5, 'zwei'); 'ein'.padEnd(5); 'ein'.padEnd(2, 'zwei');
|
- padEnd()用于字符串尾部补全,接收两个参数,第一个参数表示字符串最小长度,第二个参数表示补全的字符串。
- 如果原字符串长度等于或大于指定的最小长度(第一个参数),则返回字符串。
- 如果用于补全的字符串和原字符串长度超过了指定的最小长度(第一个参数),则会截取补全字符串。
- 如果省去第二个参数,则使用空格进行补全。
数值api
ES6将一些全局方法(window对象的方法),移植到了Number对象上面。如parseInt()和parseFloat(),但使用方法还是完全不变。
Number.isInteger
1 2 3 4 5 6
| Number.isInteger(25); Number.isInteger(3.14); Number.isInteger(-3);
Number.isInteger('15'); Number.isInteger(3.0000000000000000000000000001);
|
- Number.isInteger用来判断一个数值是否为整数。
- 非数值类型,直接返回false,即isInteger不会对参数进行类型转换。
- 如果数值超过javascript的数值范围,判断结果可能会出错。
Math扩展
ES6在Math上进行了扩展,新增了17个方法。这里例举几个可能会使用到的方法。
1 2
| Math.log10(1); Math.log10(100);
|
1 2
| Math.log2(2); Math.log2(0.5);
|
指数运算符(非api)
数组api
Array.from
1 2 3 4 5 6 7 8 9 10 11 12
| let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 };
var arr1 = [].slice.call(arrayLike);
let arr2 = Array.from(arrayLike);
|
Array.from可以将类数组对象和可遍历对象转换为数组(Set和Map)。
Array.of
1 2 3
| Array.of(3, 11, 8) Array.of(3) Array.of(3).length
|
Array.of方法用于将一组值转换为数组,参数仅当数组成员处理,不会造成如Array( )所产生的歧义。
fill方法
1 2 3 4 5 6 7 8
| ['a', 'b', 'c'].fill(7);
new Array(3).fill(7);
new Array(3).fill(7, 1, 2);
|
fill方法应用在数组实例上,该方法注册在Array构造函数的原型对象上。用于使用给定值填充数组。fill方法还接收第二和第三个参数,用于指定填充的起始位置和结束位置。
1 2 3 4 5 6 7 8 9
| let arr = new Array(3).fill({name: "Mike"}); arr[0].name = "Ben"; arr
let arr = new Array(3).fill([]); arr[0].push(5); arr
|
如果填充值是一个对象,填充的值将引用这个对象,也就是说,如果修改数组的内容,相应的会修改填充对象,每个数组元素值都会被修改。
entries() | keys() | values()
ES6提供了三个新方法用于遍历数组。entries( )遍历数组的键值对,keys( )遍历数组的键,values( )遍历数组的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| for (let index of ['a', 'b'].keys()) { console.log(index); }
for (let elem of ['a', 'b'].values()) { console.log(elem); }
for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); }
|
includes
1 2 3 4 5
| [1, 2, 3].includes(2); [1, 2, 3].includes(4);
[1, 2, 3].includes(3, 3); [1, 2, 3].includes(3, -1);
|
Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法的第二个参数表示搜索的起始位置,如果第二个参数为负数,则表示倒数的位置。
对象api
Object.assign
1 2 3 4 5 6 7
| const target = { a: 1, b: 1 };
const source1 = { b: 2, c: 2 }; const source2 = { c: 3 };
Object.assign(target, source1, source2); target
|
Object.assign( )方法用于对象合并,可以接收多个参数,第一个参数是合并的目标对象,后续对象参数都将合并到第一个对象中。
注意:assign方法在合并时,同名熟悉会进行覆盖,后面的同名属性会覆盖前面的属性。
应用场景:
Object.assign( )方法可以用于对象拷贝,但只进行浅拷贝,即仅对对象的第一级进行复制拷贝,深层次还是进行引用。
1 2 3 4 5 6 7 8 9 10
| const b = {b: 1}; const obj1 = {a: b}; const obj2 = Object.assign({}, obj1);
obj1.a.b = 2; obj2.a.b b.b = 1;
obj1.a.b obj2.a.b
|
entries() | keys() | values()
1 2 3 4 5 6 7 8 9
| var obj = { foo: 'bar', baz: 42 }; Object.keys(obj);
Object.values(obj);
Object.entries(obj);
|
对象同样支持通过entries, keys, values等方法来获取对象的键,值和键值对,并将其存储在一个数组中。键值对以二维数组的方式进行存储。
for…of
Iterator意为遍历器,ES6提供了for…of作为Javascript中所有遍历器接口的遍历方法。如此,我们可以用统一的方法来遍历这些数据结构。
数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| for (let index of ['a', 'b'].keys()) { console.log(index); }
for (let elem of ['a', 'b'].values()) { console.log(elem); }
for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); }
|
对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let {keys, values, entries} = Object; let obj = { a: 1, b: 2, c: 3 };
for (let key of keys(obj)) { console.log(key); }
for (let value of values(obj)) { console.log(value); }
for (let [key, value] of entries(obj)) { console.log([key, value]); }
|