数据类型
1、Number:JavaScript不区分整数和浮点数
123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
NaN === NaN; // false
isNaN(NaN); // true,判断是否为NaN
2、字符串:'xx'、"dd"
3、布尔值
false && true && false; // 这个&&语句计算结果为false
false || true || false; // 这个||语句计算结果为true
4、null和undefined
5、数组(是一种特殊的对象)
6、对象
ES6新增数据类型
1、Map:是一组键值对的结构,具有极快的查找速度
举个例子,假设要根据同学的名字查找对应的成绩
①用Array实现
//给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长
var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];
②、用Map实现
//只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
map用法:
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,后面的值会把前面的值冲掉:
var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88
2、Set:也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
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']);//注意数字3和字符串'3'是不同的元素。
s; // Set {1, 2, 3, "3"}
//通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果
s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}
//通过delete(key)方法可以删除元素
var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
iterable类型(ES6):Array、Map和Set
1、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);//a,b,c
}
for (var x of s) { // 遍历Set
console.log(x);//A,B,C
}
for (var x of m) { // 遍历Map
console.log(x);//1,x 2,y 3,z
console.log(x[0] + '=' + x[1]);//1=x,2=y,3=z
}
2、forEach推荐使用
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
/*
A, index = 0
B, index = 1
C, index = 2
*/
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
//Set没有索引,因此回调函数的前两个参数都是元素本身
console.log(element);
/*
A
B
C
*/
});
});
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
//value: x,y,z
//key: 1,2,3
console.log(value);
});
网友评论