1.JS的类型以及类型检测
js的基本类型有:undefined,null,boolean,string,number
js的引用类型有:Object,Array,Function,Map,Set,Date,以及正则表达式
我们在做类型检测的时候如果是对于基本类型可以用typeof或者===,如果是引用类型可以通过instance of 来检测某某实例是否属于某个引用类型。
2. 实例对象自带的属性和方法
constructor
指向用于创建当前对象的构造函数 。(对于上面例子而言,就是Object()
)hasOwnProperty(propertyName)
用于检查给定属性是否在当前对象实例中isPrototypeOf(Object)
用于检查传入的对象是否是当前对象的原型propertyIsEnumerable(propertyName)
用于检查给定的属性是否能够使用for-in
来枚举toLocaleString()
返回对象的字符串表示,该字符串与执行环境的地区对应toString()
返回对象的字符串表示valueOf()
返回对象的字符串、数值、布尔值表示。通常与toString()
返回值相同
3.数组和对象的遍历方式
- 数组的遍历方式有forEach,标准的for循环,for...of,以及Map的方式
- 对象的遍历方式有for...in,Object.keys,Object.values,Object.entries
PS:for..in是遍历对象的可枚举属性,包括原型链上的数据,某些时候需要通过hasOwnProperty方法进行过滤一下,而后边提供的一些列Object的方法,无非就是先将object间接的转化为数组,然后在利用数组的遍历,object.keys是将对象的属性名组成一个数组,object.values是将对象的属性值组成一个数组,object.entries是将对象的属性名和属性值转化为键值对的数组。
4. Array,Set,Map,WeakSet,WeakMap的区别以及介绍
- Set和Array的区别在于:
1.前者是不允许重复的,后者允许重复
2. 前者是不能通过索引访问的也就是无序的,后者可以通过索引访问也就是有序的
3.数组适合于有序的、需要频繁读取和修改元素的情况,以及需要保留重复值的场景。
4. 集合适用于需要存储唯一值的场景,以及需要快速判定特定值是否存在的情况。
- weakSet和Set的区别在于:
1. weakSet内部是只能存放对象的,一旦存入不属于对象的值,就会报错。
2. WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中,这就导致无法确定weakSet里边元素的个数,这也让weakSet被禁止遍历
weakMap和map的区别在于:
1. WeakMap
只接受对象作为键名(null
除外),不接受其他类型的值作为键名。
2. WeakMap
的键名所指向的对象(注意只是键名),不计入垃圾回收机制。我们正常写一个数组的时候,如果数组中的元素没有地方引用了,我们想要让他被垃圾回收掉,就需要手动删除这两个元素否则垃圾回收就不会自动释放,而weakMap里边的对象就是消除了这个弊端,一旦该对象不被其他地方所引用就会立即释放掉,因此也没有遍历的方法。