1.基本数据类型
存储在栈中(后进先出)
undefined(未定义的)、null、string、boolean、number、symbol
var s = Symbol('foo');
typeof s;//s为symbol类型
symbol值由Symbol()函数产生,属性名为symbol类型的都是独一无二的,不会与其它属性名产生冲突
如果 Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。
const obj = {
toString() {
return 'abc';
}
};
const sym = Symbol(obj);
sym // Symbol(abc)
Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();
s1 === s2 // false
// 有参数的情况
let s1 = Symbol('foo');
let s2 = Symbol('foo');
s1 === s2 // false
Symbol 值不能与其他类型的值进行运算,会报错。
let sym = Symbol('My symbol');
"your symbol is " + sym
// TypeError: can't convert symbol to string
`your symbol is ${sym}`
// TypeError: can't convert symbol to string
Symbol 值可以显式转为字符串。
let sym = Symbol('My symbol');
String(sym) // 'Symbol(My symbol)'
sym.toString() // 'Symbol(My symbol)'
Symbol 值也可以转为布尔值,但是不能转为数值。
let sym = Symbol();
Boolean(sym) // true
!sym // false
if (sym) {
// ...
}
Number(sym) // TypeError
sym + 2 // TypeError
2.引用数据类型
object(对象)
Array(数组)
Function(函数)
存储在堆中(后进后出)
3.set
概念:set是ES6新增的数据结构。集合的概念是一组无序且唯一(即不重复)的项组成。set数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中,与数组类似,但成员都是唯一的,没有重复的值。
特点:key和value相同,没有重复的value。
创建
const s=new Set([1,2,3])
console.log(s)//Set(3) {1, 2, 3}
数组去重
var arr=[1,2,3,4,5,2,3,1];
const s=new Set(arr)
console.log(Array.from(s))// [1, 2, 3, 4, 5]
set常用的方法
1、set.add(value)添加一个数据,返回Set结构本身
2、set.delete(value)删除指定数据,表示删除是否成功
3、set.has(value)判断该值是否为set成员,返回一个布尔值
4、set.clear() 清除所有数据,没有返回值
5、set.keys()返回键名的遍历器
6、set.values()返回键值的遍历器
7、entries()返回键值对的遍历器
8、forEach()使用回调函数的每个成员
4.map
字典是用来存储不重复key的hash结构。不同于集合(Set)的事,字典使用的是[键:值]的形式来存储数据的。
javascript的对象(object:{})只能用字符串做键,这给他的使用带来了很大的限制。
为了解决这个问题,ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但它的键不仅仅限制在字符串,各类型的值(包括对象)都可以做键,Map结构提供了“值:值”,object是“字符串:值”,所以Map使用起来更方便。
Map常见的用法与Set数据结构类似,下面举几个简单的例子:
5.判断数据类型方法
判断基本数据类型 typeof
用typeof判断null的数据类型的时候,返回的是object
typeof对于引用数据类型只能判断出function返回function,其余两个都是返回object
对象原型链判断方法: Object.prototype.toString.call()
console.log(Object.prototype.toString.call("123")) -------->[object String]
console.log(Object.prototype.toString.call(123)) -------->[object Number]
console.log(Object.prototype.toString.call(true)) -------->[object Boolean]
console.log(Object.prototype.toString.call([1, 2, 3])) -------->[object Array]
console.log(Object.prototype.toString.call(null)) -------->[object Null]
console.log(Object.prototype.toString.call(undefined)) -------->[object Undefined]
console.log(Object.prototype.toString.call({name: 'Hello'})) -------->[object Object]
console.log(Object.prototype.toString.call(function () {})) -------->[object Function]
console.log(Object.prototype.toString.call(new Date())) -------->[object Date]
console.log(Object.prototype.toString.call(/\d/)) -------->[object RegExp]
console.log(Object.prototype.toString.call(Symbol())) -------->[object Symbol]