## 一、字符串的扩展 - `includes(str)` : 判断是否包含指定的字符串 - `startsWith(str) `: 判断是否以指定字符串开头 - `endsWith(str) `: 判断是否以指定字符串结尾 - `repeat(count) `: 重复指定次数 ```js let str = 'abcdefg'; console.log(str.includes('a')); //true console.log(str.includes('h')); //false //startsWith(str) : 判断是否以指定字符串开头 console.log(str.startsWith('ab')); //true console.log(str.startsWith('ac')); //false //endsWith(str) : 判断是否以指定字符串结尾 console.log(str.endsWith('fg')); //true console.log(str.endsWith('d')); //false //repeat(count) : 重复指定次数a console.log(str.repeat(3)); // abcdefgabcdefgabcdefg ``` ## 二、数值的扩展 二进制与八进制数值表示法: 二进制用`0b`开头, 八进制用`0o`开头。 - `Number.isFinite(i) `: 判断是否是有限大的数 - `Number.isNaN(i)` : 判断是否是NaN - `Number.isInteger(i)` : 判断是否是整数 - `Number.parseInt(str) `: 将字符串转换为对应的数值 - `Math.trunc(i) `: 直接去除小数部分 ```js console.log(0b1010); //10 console.log(0o56); //46 console.log('--------------------'); //Number.isFinite(i) : 判断是否是有限大的数 console.log(Number.isFinite(NaN)); //false console.log(Number.isFinite(5)); //true console.log(Number.isFinite(Infinity)); //false console.log('--------------------'); //Number.isNaN(i) : 判断是否是NaN console.log(Number.isNaN(NaN)); //true console.log(Number.isNaN(5)); //false console.log(Number.isNaN(undefined)); //false console.log('--------------------'); //Number.isInteger(i) : 判断是否是整数 console.log(Number.isInteger(5.23)); //false console.log(Number.isInteger(5.0)); //true console.log(Number.isInteger(5)); //true console.log('--------------------'); //Number.parseInt(str) : 将字符串转换为对应的数值 console.log(Number.parseInt('123abc')); //123 console.log(Number.parseInt('a123abc')); //NaN console.log('--------------------'); // Math.trunc(i) : 直接去除小数部分 console.log(Math.trunc(13.123)); //13 ``` ## 三、数组扩展 - `Array.from(v) `: 将伪数组对象或可遍历对象转换为真数组 - `Array.of(v1, v2, v3)` : 将一系列值转换成数组 - `find(function(value, index, arr){return true})` : 找出第一个满足条件返回true的元素 - `findIndex(function(value, index, arr){return true}) `: 找出第一个满足条件返回true的元素下标 ```html


``` ## 四、对象扩展 - `Object.is(v1, v2)` :判断2个数据是否完全相等。(内部是的实现原理是**比较字符串**是否完全相等) ```js console.log(Object.is('abc', 'abc'));//true console.log(NaN == NaN);//false console.log(Object.is(NaN, NaN));//true console.log(0 == -0);//true console.log(Object.is(0, -0));//false ``` - `Object.assign(target, source1, source2..)`: 将源对象的属性复制到目标对象上 ```js let obj = {name : 'Daotin', age : 18, c: {d: 2}}; let obj1 = {}; Object.assign(obj1, obj); console.log(obj1, obj1.name); ``` - 直接操作` __proto__ `属性 ```js let obj3 = {name : 'Daotin', age : 18}; let obj4 = {}; // obj4的隐式原型指向obj3 obj4.__proto__ = obj3; console.log(obj4, obj4.name, obj4.age);// {name : 'Daotin', age : 18} Daotin 18 ``` ## 五、set容器和map容器 **Set容器** : 无序不可重复的多个value的集合体。 Set容器需要通过new 来创建一个Set容器对象,参数即为多个value值。 ```js let set = new Set([1,2,3,4,3,2,1,6]); ``` set容器对象的方法和属性: - `Set() `:set容器的构造函数(不带参数value集合) - `Set(array)`:set容器的构造函数(带参数value集合) - `add(value)`:向set容器对象添加值value - `delete(value)`:删除set容器对象的value值 - `has(value)`:判断set容器是否有value值 - `clear()`:清空set容器 - `size`:相当于数组的length **Map容器** : 无序的 key不重复的多个key-value的集合体。 > 注意:Map的参数数组的集合,每一个数组都是key-value的形式。整个数组集合的外面用`[]`包围,而不是`{}`。 ```js let map = new Map([['name', 'Daorin'],['age', 18]]); ``` - Map() - Map(array) - set(key, value) // 类似于set容器的add方法 - get(key) - delete(key) - has(key) - clear() - size **Set和Map的作用:** 1、Set容器可以为数组去重。 ```js let arr = [1, 2, 3, 4, 5, 2, 4, 5]; let set = new Set(arr); arr = []; for (let i of set) { arr.push(i); } console.log(arr); // 1,2,3,4,5 ``` 2、Set和Map容器可以使用`for ..of..` 来遍历。 ## 六、ES7 方法介绍 1、指数运算符:`**` ```js console.log(3**2); // 9 ``` 2、`Array.prototype.includes(value);` :判断数组中是否包含指定value。(在ES6中有,`str.includes(str1)` : 判断str中是否包含指定的字符串str1) ```js let arr = [1,2,3,4, 'abc']; console.log(arr.includes(2));//true console.log(arr.includes('a'));//false ```