Web/05-JavaScript之ES6语法/08-字符串、数组、对象的扩展.md
2020-08-25 21:35:30 +08:00

164 lines
3.8 KiB
JavaScript
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.

## 字符串的扩展
> 下面提到的字符串的几个方法更详细的内容可以看04-JavaScript 基础/内置对象 String字符串的常见方法.md
ES6 中的字符串扩展如下
- `includes(str)`判断是否包含指定的字符串
- `startsWith(str)`判断是否以指定字符串开头
- `endsWith(str)`判断是否以指定字符串结尾
- `repeat(count)`重复指定次数
举例如下
```javascript
let str = 'abcdefg';
console.log(str.includes('a')); //true
console.log(str.includes('h')); //false
//startsWith(str) : 判断是否以指定字符串开头
console.log(str.startsWith('a')); //true
console.log(str.startsWith('d')); //false
//endsWith(str) : 判断是否以指定字符串结尾
console.log(str.endsWith('g')); //true
console.log(str.endsWith('d')); //false
//repeat(count) : 重复指定次数a
console.log(str.repeat(5));
```
打印结果
![](http://img.smyhvae.com/20180402_1050.png)
## Number 的扩展
- 二进制与八进制数值表示法: 二进制用`0b`, 八进制用`0o`
举例
```javascript
console.log(0b1010); //10
console.log(0o56); //46
```
- `Number.isFinite(i)`判断是否为有限大的数比如`Infinity`这种无穷大的数返回的就是 false
- `Number.isNaN(i)`判断是否为 NaN
- `Number.isInteger(i)`判断是否为整数
- `Number.parseInt(str)`将字符串转换为对应的数值
- `Math.trunc(i)`去除小数部分
举例
```javascript
//Number.isFinite(i) : 判断是否是有限大的数
console.log(Number.isFinite(NaN)); //false
console.log(Number.isFinite(5)); //true
console.log(Number.isFinite(Infinity)); //false
//Number.isNaN(i) : 判断是否是NaN
console.log(Number.isNaN(NaN)); //true
console.log(Number.isNaN(5)); //falsse
//Number.isInteger(i) : 判断是否是整数
console.log(Number.isInteger(5.23)); //false
console.log(Number.isInteger(5.0)); //true
console.log(Number.isInteger(5)); //true
//Number.parseInt(str) : 将字符串转换为对应的数值
console.log(Number.parseInt('123abc')); //123
console.log(Number.parseInt('a123abc')); //NaN
// Math.trunc(i) : 直接去除小数部分
console.log(Math.trunc(13.123)); //13
```
## 数组的扩展
> 下面提到的数组的几个方法更详细的内容可以看04-JavaScript 基础/数组的常见方法.md
- Array.from()
- find()
- findIndex()
## 对象的扩展
### 扩展 1
```javascript
Object.is(v1, v2);
```
**作用**判断两个数据是否完全相等底层是通过**字符串**来判断的
我们先来看下面这两行代码的打印结果
```javascript
console.log(0 == -0);
console.log(NaN == NaN);
```
打印结果
```
true
false
```
上方代码中第一行代码的打印结果为 true这个很好理解第二行代码的打印结果为 false因为 NaN 和任何值都不相等
但是如果换成下面这种方式来比较
```javascript
console.log(Object.is(0, -0));
console.log(Object.is(NaN, NaN));
```
打印结果却是
```bash
false
true
```
代码解释还是刚刚说的那样`Object.is(v1, v2)`比较的是字符串是否相等
### Object.assign()
Object.assign() 在实战开发中使用到的频率非常高一定要重视关于它的内容详见04-JavaScript 基础/浅拷贝和深拷贝.md
### 扩展 3`__proto__`属性
举例
```javascript
let obj1 = { name: 'smyhvae' };
let obj2 = {};
obj2.__proto__ = obj1;
console.log(obj1);
console.log(obj2);
console.log(obj2.name);
```
打印结果
![](http://img.smyhvae.com/20180404_2251.png)
上方代码中obj2 本身是没有属性的但是通过`__proto__`属性和 obj1 产生关联于是就可以获得 obj1 里的属性
```javascript
```