数据类型

2019-12-19  本文已影响0人  混吃等死小前端

数据类型

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);
});
上一篇 下一篇

猜你喜欢

热点阅读