1
0
mirror of https://github.com/Daotin/Web.git synced 2024-11-01 13:34:47 +08:00
Web-main/08-ES6语法/06-字符串扩展,数值扩展,数组扩展,对象扩展,set,map,ES7.md
2020-12-30 11:39:04 +08:00

264 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 一、字符串的扩展
- `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
<body>
<button>测试1</button>
<br>
<button>测试2</button>
<br>
<button>测试3</button>
<br>
<!--
1. Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
2. Array.of(v1, v2, v3) : 将一系列值转换成数组
3. find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
4. findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
-->
<script type="text/javascript">
//Array.from(v) : 将伪数组对象或可遍历对象转换为真数组,返回值即为真数组
// 使用 DOM操纵获取的元素集合是伪数组。
let btns = document.getElementsByTagName('button');
console.log(btns.length); //3
Array.from(btns).forEach(function (item, index) {
console.log(item, index);
});
//Array.of(v1, v2, v3) : 将一系列单独的值转换成数组
let arr = Array.of(1, 'abc', true);
console.log(arr);
//find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
let arr1 = [1, 3, 5, 2, 6, 7, 3];
let result = arr1.find(function (item, index) {
// 查找arr1数组中第一个大于3的元素
return item > 3;
});
console.log(result); //5
//findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
let result1 = arr1.findIndex(function (item, index) {
// 查找arr1数组中第一个大于3的元素下标值
return item > 3;
});
console.log(result1); //2
</script>
</body>
```
## 四、对象扩展
- `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
```