CPPAlien / JS-QA

前端知识问答
0 stars 0 forks source link

JavaScript 小知识 #13

Open CPPAlien opened 5 years ago

CPPAlien commented 5 years ago

filter: 过滤掉某些值,和 map 可以组成链式调用

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(num => num * 2).filter(num => num > 5);
// arr2 = [6, 8, 10]

reduce: 把数组所有数据聚合成一个值。

let sum = arr.map(num => num * 2).filter(num => num > 5).reduce((a, b) => a + b);
// sum = 24

https://codeburst.io/learn-understand-javascripts-reduce-function-b2b0406efbdc 有关以上三者链式调用的文章可看:https://codeburst.io/javascript-learn-to-chain-map-filter-and-reduce-acd2d0562cd4

forEach: 更适合再不变更数组中元素,仅仅用数组中的值参与某些计算时。

arr.forEach((letter) => {
    console.log(letter);
});

for..in 和 for..of

for ..in 用于遍历对象,会返回对象的 key 值,其中原形链上的属性也会被遍历。for..of 专门用作遍历数组,返回的值为数组值。因数组本身也是对象,所以使用 for..in 在数组上时,会返回数组的下标。

以下有两个Tips

1, 判断一个对象是否为空

isEmpty(object) {
  for (const i in object) {
    return false;
  }
  return true;
}

2, 区分数组和对象

isArray(value){
  return value && typeof value === 'object' && value.constructor === Array;
}

Array

var points = new Array(); // bad
var points = []
以上两种表达等价,但不推荐使用第一种,因为第一种在有一个参数时,表示创建一个包含多少 undefined 内容的数组,而有多个参数时,又表示创建了包含哪些参数的数组。
var points = new Array(40, 100); // 包含 40 和 100 的数组。
var points = new Array(40); // 包含 40 个 undefined 的数组。

Q:如何创建一个包含 100 个零的数组? 1,javascript

var points = new Array(100).fill(0);

2,Java

int points = new int[100];
Arrays.fill(points, 0); // 可省略,因为 java 语言规范中就规定了创建的 int 数组默认为 0

var、let、const

const 和 let 都是块级变量,而 var 无块级作用域,只有函数作用域。

for(var i=0;i<=1000;i++){ var sum=0; sum+=i; } alert(sum);

上面的话换成 const 和 let 会报错

**如果一个变量前什么都不加,则是声明了一个全局变量,在ES5的'use strict'模式下,如果变量没有使用var定义,就会报错。**

function hh(){ console.log(a); a = 'hello world'; } hh() // undefined

CPPAlien commented 4 years ago
Object.is() === ==
NaN, NaN true false false
0, -0 false true true
3, 3.0 true true true
null, undefined false false true
3, '3' false false true