对Number对象扩展
- Number.isInteger(x):判断传入参数是否为整数;
- Number.isNaN(x):传入参数是否为NaN; ```javascript Number.isInteger(3); // true Number.isInteger(3.5); // false
Number.isNaN(2); // false Number.isNaN(parseInt(“aaa”, 0)); // true
<a name="Krp6x"></a>
## 对String对象扩展
在ECMAScript 2017中,为 String 对象新增两个方法:`padStart` 与 `padEnd`。<br />这两个方法的目的是在字符串前面或后面进行填充,使其长度成为指定长度。可以使用指定字符串进行填充。
方法示例为:`str.padStart(padLength [, padString])`。方法接收的第一个参数为 `padLength`,指定返回的字符长度;第二个参数是是要填充的字符串,默认是空格。
```javascript
var string = "hello";
string.padStart(10,"aa"); // "aaaaahello"
string.padEnd(10, "aa"); // "helloaaaaa"
对Array对象的扩展``
Array.from(arrayLike, mapFn, thisArgs)
第一个参数指定想要转换的类数组对象(拥有 length 属性和若干索引属性的任意对象)或可迭代对象(如Map\Set);第二个参数是一个回调函数,将对新数组中的每一个元素调用该函数;第三个参数用于指定调用 mapFn 时的 this 对象。即类似于 Array.from(arrayLike).map(mapFn, this.Args)。
console.log(Array.from('foo')); // ['f','o','o']
Array.of(ele0,ele1,ele2...)
使用不确定数量的值创建并返回新的数组。
console.log(Array.of(1,2,3)); // [1,2,3]
Array.prototype.fill(value [, start] [, end])
该方法用一个固定值 value 填充一个数组中从起始索引到终止索引内的全部元素,并将被填充后的数组返回。
console.log([1,2,3].fill(4)); // [4,4,4]
console.log(Array(3).fill(4)); // [4,4,4]
当填充的是一个对象或数组时,填充的对象或数组是一个地址引用,而非对象或数组的副本。
var arr = Array(2).fill({});
arr[0].hi = "hi";
console.log(arr); // [{hi:"hi"}, {hi:"hi"}]数组
Array.prototype.find(cb [, thisArgs])
与Array.prototype.findIndex(cb [, thisArgs])
- find 返回的是第一个满足 cb 回调函数条件的元素的值;
- findIndex 返回的是第一个满足 cb 回调函数条件的元素的索引值; ```javascript var fruit = [{ name: “苹果” }, { name: “香蕉” }, { name: “雪梨” }];
console.log(fruit.find(item => item.name === “雪梨”)); console.log(fruit.findIndex(item => item.name === “雪梨”));
- `Array.prototype.copyWithin(target [, start] [, end])`
复制数组的一部分到同一数组中的另一个位置,并返回被复制后的数组,但不修改其大小。<br />第一个参数用于指定复制的目标起始索引,如果为负数,则从末尾开始计算起始位置;第二个参数和第三个参数用于指定复制的区间(左闭右开)。
```javascript
var arr = [1,2,3,4,5];
arr.copyWithin(0, 3, 4); // [4,2,3,4,5]
arr.copyWithin(-2, -3, -1); // [1,2,3,3,4]
Array.prototype.entries()
与Array.prototype.keys()
这两个方法不存入参数,entries 方法返回数组中每个索引的键名/键值对,keys 方法返回数组中每个索引的键名。
var arr = ["a", "b", "c"];
let iter = arr.entries();
for (const item of iter) {
console.log(item); // [0,'a'], [1,'b'], [2,'c']
}
let keys = arr.keys();
for (const key of keys) {
console.log(key); // [0, 1, 2]
}
对Object对象的扩展
Object.assign(target, ...sources)
第一个参数为目标对象,第二个参数开始为一个或多个源对象。如果目标对象和复制源对象中的属性相同,则目标对象中的属性会被复制源的属性覆盖,后续复制源以此类推。
如果属性值为只读,修改属性值将引发浏览器错误。
let obj = Object.assign({}, { a: 1 }, { b: 2 });
console.log(obj); // { a: 1, b: 2 }
在 ECMAScript 2017 中,为 Object 对象添加 values
方法与 entries
方法。Object.values
返回一个由指定对象的各属性值所组成的数组。当对象为数组时,方法返回数组中所有元素。
let obj = {x: 'a', y: 'b'};
console.log(Object.values(obj)); // ['a', 'b']
let arr = ['h', 'e', 'l']; // 相当于{0:'h', 1: 'e', 2: 'l'}
console.log(Object.values(arr)); // ['h', 'e', 'l']
Object.entries
方法返回一个由指定对象的各属性名及属性值所组成的元素格式为 [key,value] 的数组。
let obj = {x: 'a', y: 'b'};
console.log(Object.entries(obj)); // [['x','a'], ['y','b']]
在 ECMAScript 2017 中,为 Object 对象添加 getOwnPropertyDescriptors
方法。返回指定对象的所有属性描述对象,该对象具有 configurable
、enumerable
、writable
、get
、set
、value
属性。
const obj = {
get es7() {
return 777;
},
};
console.log(Object.getOwnPropertyDescriptors(obj));
to be continue…