ES6数据类型

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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值