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
数组操作
map: 更适合对数组中元素进行变更时使用。
filter: 过滤掉某些值,和 map 可以组成链式调用
reduce: 把数组所有数据聚合成一个值。
https://codeburst.io/learn-understand-javascripts-reduce-function-b2b0406efbdc 有关以上三者链式调用的文章可看:https://codeburst.io/javascript-learn-to-chain-map-filter-and-reduce-acd2d0562cd4
forEach: 更适合再不变更数组中元素,仅仅用数组中的值参与某些计算时。
for..in 和 for..of
for ..in 用于遍历对象,会返回对象的 key 值,其中原形链上的属性也会被遍历。for..of 专门用作遍历数组,返回的值为数组值。因数组本身也是对象,所以使用 for..in 在数组上时,会返回数组的下标。
以下有两个Tips
1, 判断一个对象是否为空
2, 区分数组和对象
Array
Q:如何创建一个包含 100 个零的数组? 1,javascript
2,Java
var、let、const
for(var i=0;i<=1000;i++){ var sum=0; sum+=i; } alert(sum);
function hh(){ console.log(a); a = 'hello world'; } hh() // undefined