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数据结构类似,下面举几个简单的例子:

es判断数组字段不为null es6判断数据类型_es6


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]