JavaScript学习笔记--语法二

时间:2023-03-09 14:24:32
JavaScript学习笔记--语法二
  • 条件判断与C语言一样

  • 两种循环。for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i

var x = 0;

var i;

for (i=1; i<=10000; i++) {

x = x + i;

}

x; // 50005000

-------------------或者----------------

> var x = 0;
for (var i=1; i<=10000; i++) {
x = x + i;
}
< 50005000

由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for ... in循环可以直接循环出Array的索引:

var a = ['A', 'B', 'C'];

for (var i in a) {

console.log(i); // '0', '1', '2'

console.log(a[i]); // 'A', 'B', 'C'

}

请注意,for ... in对Array的循环得到的是String而不是Number。

  • Map和Set

  • iterable

MapSet是ES6标准新增的数据类型。

Map是一组键值对的结构,具有极快的查找速度。

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);

m.get('Michael'); // 95

var m = new Map(); // Map

m.set('Adam', 67); // 添加新的key-value

m.set('Bob', 59);

m.has('Adam'); // 是否存在key 'Adam': true

m.get('Adam'); // 67

m.delete('Adam'); // 删除key 'Adam'

m.get('Adam'); // undefined

一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // Set

var s2 = new Set([1, 2, 3]); // 1, 2, 3

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);

s; // Set {1, 2, 3, "3"}

set属性方法:

add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果

通过delete(key)方法可以删除元素。

ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型。

具有iterable类型的集合可以通过新的for ... of循环来遍历。

for ... in循环将把name包括在内,但Arraylength属性却不包括在内。

for ... of循环则完全修复了这些问题,它只循环集合本身的元素:

for ... of循环是ES6引入的新的语法。

for ... of循环遍历集合,用法如下:

var a = ['A', 'B', 'C'];

var s = new Set(['A', 'B', 'C']);

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);

for (var x of a) { // 遍历Array

console.log(x);

}

[Log] A
[Log] B
[Log] C

for (var x of s) { // 遍历Set

console.log(x);

}

[Log] A
[Log] B
[Log] C

for (var x of m) { // 遍历Map

console.log(x[0] + '=' + x[1]);

}

[Log] 1=x
[Log] 2=y
[Log] 3=z

for ... in它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。for ... of遍历的是对象的值。

当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:

var a = ['A', 'B', 'C'];

a.name = 'Hello';

for (var x in a) {

console.log(x); // '0', '1', '2', 'name'

}

[Log] 0
[Log] 1
[Log] 2
[Log] name

var a = ['A', 'B', 'C'];

a.name = 'Hello';

for (var x of a) {

console.log(x); // 'A', 'B', 'C'

}

[Log] A

[Log] B

[Log] C

循环最好用forEach方法,它接收一个函数,每次迭代就自动回调该函数。

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);

m.forEach(function (value, key, map) {

console.log(value);

});

[Log] x
[Log] y
[Log] z

Map的回调函数参数依次为valuekeymap本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);

m.forEach(function (value, key, map) {

console.log(value);

});

[Log] x

[Log] y

[Log] z

只需要获得Array的element:

var a = ['A', 'B', 'C'];

a.forEach(function (element) {

console.log(element);

});

[Log] A

[Log] B

[Log] C