1. Object 生成对象的方式分为几种这里不罗列API,如果需要API可以自行查询。只会强调一些不起眼但是很重要的细节问题
const obj = new Object()
const obj1 = {}
const obj2 = Object.create(null)
对象的类型可以是数字/ 字符串/ symbol/ 其余的类型(数组/ 函数/ 对象)
如果对象的key是字符串
/ symbol
的话,不会做任何处理如果对象的key是数字
的话 会转换为字符串如果对象的key是函数
/ 数组
/ 对象
的话,都会调用对应的toString方法进行转换
const test = function () {}
const arr = new Array(1, 2, 3)
const namekey = Symbol('name')
const obj = { name: '1' }
const person = {
name: '张三',
age: 18,
5: true,
[test]: test,
[arr]: arr,
[namekey]: '张三',
[obj]: '111'
}
const keys = Object.getOwnPropertySymbols(person)
keys.forEach((value) => {
console.log(typeof value) // symbol
})
console.log(person)
/*
{
'5': true,
name: '张三',
age: 18,
'function () {}': [Function: test],
'1,2,3': [ 1, 2, 3 ],
'[object Object]': '111',
[Symbol(name)]: '张三'
}
*/
2. 数组
1. 什么是类数组
不是函数且有length属性且length属性值是不大于Number.MAX_SAFE_INTEGER
的值满足以上的条件的,可以叫做类数组
// 字符串满足上传的情况
console.log(Array.from('test')) // [ 't', 'e', 's', 't' ]
2. Array.form
Array.form
是对数组的浅赋值
const test = [0, 1, { name: 'lihh' }]
const test1 = Array.from(test)
console.log(test === test1, test[2] === test1[2]) // false true
Array.from
可以转换Map,Set
const m = new Map().set(1, 2).set(3, 4)
const s = new Set().add(1).add(2).add(3).add(4)
console.log(Array.from(m)) // [ [ 1, 2 ], [ 3, 4 ] ]
console.log(Array.from(s)) // [ 1, 2, 3, 4 ]
Array.from
可以转换具有length
属性的对象
利用这个特性如果想生成一个指定长度且都是1的数组可以使用Array.from({length: 10}).fill(1)
// 转换特殊对象
const obj = {
0: 1,
1: 2,
2: 3,
3: 4,
length: 4
}
console.log(Array.from(obj)) // [ 1, 2, 3, 4 ]
3. Map
Map可以使用任何JavaScript数据类型作为键
Object以及Map不同:
内存占用,给定固定大小内存,Map大约可以比Object多存储50%键/值对插入性能 两者大致相同查找速度,两者差异极小删除性能,Map的删除性能比Object更快
4. WeakMap
弱映射中键只能是Object 或是 继承自Object的类型因为是弱引用,所以不可迭代ECMAScript 6 新增的“弱映射”(WeakMap)是一种新的集合类型,为这门语言带来了增强的键/值对存储机制。WeakMap 是 Map 的“兄弟”类型,其 API 也是 Map 的子集。WeakMap 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱映射”中键的方式
const vm = new WeakMap
const container = {key: {}}
vm.set(container.key, "value")
function removeReference() {
container.key = null
}
5. Set这一次,container 对象维护着一个对弱映射键的引用,因此这个对象键不会成为垃圾回收的目标。不过,如果调用了 removeReference(),就会摧毁键对象的最后一个引用,垃圾回收程序就可以把这个键/值对清理掉
Set
中存放的值可以是任意数据类型 *** 作的API跟Map
很像,想 *** 作API自行查询文档Set
中添加的值是唯一的
6. WeakSet
set中的值必须是Object 或是 继承自Object的类型其余的跟ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set 的“兄弟”类型,其 API 也是 Set 的子集。WeakSet 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱集合”中值的方式。
WeakMap
大致保持一致
关注我的GitHub博客,会不断更新基础知识/ 源码分析/ 工程化等
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)