Symbol
- Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。Symbol是一个全局对象,Symbol不支持
new Symbol()
。 - 每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符,这是该数据类型仅有的目的。
1 | var a = new Object() |
- symbol 是一种基本数据类型。基本数据类型是
number
,string
,bool
,null
,undefined
,Object
是复杂类型。
Symbol的用处
- 创建一个隐藏属性,别人无法访问,但可以自己修改
1 | { |
Set
-
Set 对象允许你存储任何类型的唯一值(自动去重),无论是基本数据类型或者是对象引用。
-
另外,NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(尽管 NaN !== NaN)
-
数组去重
- 用排序算法解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var a = [1,2,3,4,5,4,2]
var b = [1,2,3,4,'4',5,4,2,{name:'object'}]
function uniq(array){
var result = []
var hash = {}
for(let i=0;i< array.length; i++){
hash[array[i]] = true
}
for(let key in hash){
result.push(key)
}
return result
}
console.log(uniq(a))//["1", "2", "3", "4", "5"]
console.log(uniq(b))//["1", "2", "3", "4", "5", "[object Object]"]- PS: 该方法无法区分数字和字符串,无法统计对象,而且得到的结果不是数字。
-
用Set方法解决
1
2
3
4
5var a = [1,2,3,4,'4',5,4,2,{name:'object'}]
function uniq(array){
return Array.from(new Set(array))
}
console.log(uniq(a))//[1, 2, 3, 4, "4", 5, {name:'object'}]
Map
-
Map 对象保存键值对。任何值(对象或者基本类型) 都可以作为一个键或一个值。
-
对象默认会把key值变成字符串,所以会出现以下错误
1
2
3
4
5
6var obj = {name: "weite122"}
Object.keys(obj)//["name"]
var a = {}
obj[a] = "hello"
obj//{name: "weite122", [object Object]: "hello"}
Object.keys(obj)// ["name", "[object Object]"] -
用map实现对象为key值
1
2
3
4
5var myMap = new Map()
var a = {}
myMap.set(a, 'key值是对象')
myMap//Map(1) {{…} => "key值是对象"}
myMap.get(a)//"key值是对象"
WeakSet
-
对象占内存,内存很贵,所以尽量省着用内存。GC回收就是找出开发者访问不到的对象,清除。 弱引用不属于垃圾回收范围,浏览器很可能把弱引用对象删除。
-
内存泄露:你不能使用该内存里的东西,别人也无法使用
-
它和 Set 对象的区别有两点:
- WeakSet 对象中只能存放对象引用, 不能存放值, 而 Set 对象都可以.
- WeakSet 对象中存储的对象值都是被弱引用的, 如果没有其他的变量或属性引用这个对象值, 则这个对象值会被当成垃圾回收掉. 正因为这样, WeakSet 对象是无法被枚举的, 没有办法拿到它包含的所有元素.
WeakMap
- WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
TypedArray
- 一个TypedArray 对象描述一个底层的二进制数据缓存区的一个类似数组(array-like)视图。事实上,没有名为 TypedArray的全局对象,也没有一个名为的 TypedArray构造函数。相反,有许多不同的全局对象,下面会列出这些针对特定元素类型的类型化数组的构造函数。在下面的页面中,你会找到一些不管什么类型都公用的属性和方法。
参考
- Symbol 类型
- Set 类型
- Map 类型
- WeakSet 类型
- WeakMap 类型
- TypedArray 类型
- 文章:ES2015 WeakMap的学习和使用
- 文章:JavaScript 内存泄漏教程