update:ES6之数组和对象的扩展
This commit is contained in:
parent
97fa3f9122
commit
4deec8872e
@ -1,5 +1,13 @@
|
||||
|
||||
|
||||
## 常用快捷键
|
||||
|
||||
### 代码格式化
|
||||
|
||||
Shift + Alt + F
|
||||
|
||||
## 问题
|
||||
|
||||
问题:
|
||||
|
||||
解决;You can kill the Microsoft.VSCode.Cpp.IntelliSense.Msvc process to save the file successfully. 也就是 IntelliSense 这个进程。
|
@ -157,6 +157,7 @@ sqrt即“square 开方”。比如:
|
||||
|
||||
```
|
||||
console.log("6" == 6); //true
|
||||
console.log(0 == -0); //true
|
||||
```
|
||||
|
||||
如果要保证**完全等于**,我们就要用三个等号`===`。例如:
|
||||
|
@ -149,26 +149,166 @@ ES6中的字符串扩展,用得少,而且逻辑相对简单。如下:
|
||||
console.log(arr);
|
||||
```
|
||||
|
||||
|
||||
### 扩展3
|
||||
|
||||
|
||||
- 3. find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
|
||||
|
||||
- 4. findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素的index
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**方法1**:
|
||||
|
||||
|
||||
```javascript
|
||||
find(function(item, index, arr){return true})
|
||||
```
|
||||
|
||||
**作用**:找出第一个满足「指定条件返回true」的元素。
|
||||
|
||||
举例:
|
||||
|
||||
```javascript
|
||||
let arr = [2, 3, 2, 5, 7, 6];
|
||||
|
||||
let result = arr.find(function (item, index) {
|
||||
return item > 4; //遍历数组arr,一旦发现有第一个元素大于4,就把这个元素返回
|
||||
});
|
||||
|
||||
console.log(result); //打印结果:5
|
||||
```
|
||||
|
||||
**方法2**:
|
||||
|
||||
```javascript
|
||||
findIndex(function(item, index, arr){return true})
|
||||
```
|
||||
|
||||
**作用**:找出第一个满足「指定条件返回true」的元素的index。
|
||||
|
||||
举例:
|
||||
|
||||
> 我们直接把上面的代码中的find方法改成findIndex即可。
|
||||
|
||||
```javascript
|
||||
let arr = [2, 3, 2, 5, 7, 6];
|
||||
|
||||
let result = arr.findIndex(function (item, index) {
|
||||
return item > 4; //遍历数组arr,一旦发现有第一个元素大于4,就把这个元素的index返回
|
||||
});
|
||||
|
||||
console.log(result); //打印结果:3
|
||||
```
|
||||
|
||||
## 对象的扩展
|
||||
|
||||
### 扩展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));
|
||||
```
|
||||
|
||||
打印结果却是:
|
||||
|
||||
```
|
||||
false
|
||||
true
|
||||
```
|
||||
|
||||
代码解释:还是刚刚说的那样,`Object.is(v1, v2)`比较的是字符串是否相等。
|
||||
|
||||
### 扩展2(重要)
|
||||
|
||||
```javascript
|
||||
Object.assign(目标对象, 源对象1, 源对象2...)
|
||||
```
|
||||
|
||||
**作用:** 将源对象的属性复制到目标对象上。
|
||||
|
||||
举例:
|
||||
|
||||
```javascript
|
||||
let obj1 = { name: 'smyhvae', age: 26 };
|
||||
let obj2 = { city: 'shenzhen' };
|
||||
let obj3 = {};
|
||||
|
||||
Object.assign(obj3, obj1, obj2);
|
||||
console.log(obj3);
|
||||
```
|
||||
|
||||
打印结果:
|
||||
|
||||
20180404_2240.png
|
||||
|
||||
上图显示,成功将obj1和obj2的属性复制给了obj3。
|
||||
|
||||
### 扩展3:`__proto__`属性
|
||||
|
||||
举例:
|
||||
|
||||
```javascript
|
||||
let obj1 = {name:'smyhvae'};
|
||||
let obj2 = {};
|
||||
|
||||
obj2.__proto__ = obj1;
|
||||
|
||||
console.log(obj1);
|
||||
console.log(obj2);
|
||||
console.log(obj2.name);
|
||||
```
|
||||
|
||||
打印结果:
|
||||
|
||||
20180404_2251.png
|
||||
|
||||
上方代码中,obj2本身是没有属性的,但是通过`__proto__`属性和obj1产生关联,于是就可以获得obj1里的属性。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -188,31 +328,3 @@ ES6中的字符串扩展,用得少,而且逻辑相对简单。如下:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```javascript
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```javascript
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user