1. addEventListener和onClick()的区别
a、addEventListener可以对同一个元素绑定多个事件,执行顺序从上到下依次执行。而onclick同一个元素只能绑定一个事件,如有多个,后面的事件会覆盖前面的事件。
b、addEventListener的第三个参数为布尔类型,默认为false,也就是执行的冒泡机制,如为true,则执行捕获机制。
c、注册addEventListener事件时不需要写on,而onclick方式则必须加on。
d、
在移除事件上,onclick使用的是指针指向null,例如document.onclick = null,而addEventListener则使用的是独有的移除方法removeListener(要使用此方法,addEventListener必须执行的是外部函数或存在函数名,不然则不能使用)
e、addEventListener为DOM2级事件绑定,onclick为DOM0级事件绑定。
2. new和Object.create()的区别
两者不同在于,Object.create 创建的新函数并没有继承构造函数的属性和方法,只继承了原型方法和原型属性
3. DOM的location对象
4. Object.defineProperty()的使用
5. Array.sort()方法与实现机制
https://blog.csdn.net/haotian1997/article/details/114835702
6. 函数柯里化、组合函数
https://blog.csdn.net/weixin_39788999/article/details/123287867
7. BOM属性对象方法(scroll/client/offset)
8. null和undefined的区别
null表示没有对象,即不应该有值,经常用作函数的参数,或作为原型链的重点。
undefined表示缺少值,即应该有值,但是还没有赋予(变量提升时默认会赋值为undefined,函数参数未提供默认为undefined,函数的返回值默认为undefined)
9. 数据类型转换的规则
10. 数组高阶函数、some、every、filter、map、reduce
11. mouseenter和mouseover的区别?
- mouseover鼠标经过自身盒子会触发,经过子盒子还会触发。 鼠标移动就触发
- mouseenter只会经过自身盒子触发 鼠标进入触发一次 移动不触发
12. 伪数组转为数组的方式
12.1、什么是伪数组?
1.具有length属性,可以获取长度。
2.具有索引,可以通过遍历获取所有元素。
3.不可以使用数组的内置方法和属性。
12.2、常见的伪数组
1.函数的内置对象arguments,它是所有实参组成的伪数组。
2.DOM对象组成的伪数组,通过document.querySelectorAll等获得的dom对象列表。
3.jQuery对象组成的伪数组,通过$('选择器')获取到的包含dom对象列表和jQuery方法的jQuery对象。
12.3、转换方式
a、扩展运算符 解构
b、利用Array的原型对象的slice方法,配合call()方法修改slice中this指向
c、利用Array.from方法 - ES6
13. 遍历对象属性的方法
判断是否是对象的私有属性:obj.hasOwnProperty()
获取对象的所有实例属性和函数,不包含原型链继承的属性和函数 Object.getOwnPropertyNames()
获取对象可枚举的属性,不包含继承属性 Object.keys()
14. 合并数组的方法
a、for循环 + push
b、concat 返回新数组 不改变原数组
c、apply
d、解构...
15. document和window的区别
window 指整个窗体。document指当前整个文档页面(不包含窗口对象)。document是window的一个子对象。
16. Object.is和===的区别
17. isNaN和Number.isNaN()的区别?
isNaN方法首先转换类型,而Number.isNaN方法不用;
isNaN不能用来判断是否严格等于NaN,Number.isNaN方法可用。
18. 0.1 + 0.2 !== 0.3
数据存储精度
19. 判断一个变量是数组还是对象
Object.prototype.toString.call()、instanceOf、Constructor
20. 属性访问时点操作符和[]中括号操作符的区别
https://blog.csdn.net/sinat_36359516/article/details/109987859
21. 严格模式
22. 扩展运算符与rest运算符的区别
22.1、扩展运算符的作用及使用场景
对象扩展运算符:
对象的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。扩展运算符对对象实例的拷贝属于浅拷贝
数组扩展运算符:
数组的扩展运算符可以将一个数组转为用逗号分隔的参数序列,且每次只能展开一层数组。
22.2、对 rest 参数的理解
扩展运算符(...args)被用在函数形参上时,它还可以把一个分离的参数序列整合成一个数组,便于使用数组的遍历等方法【与arguments类似,但是arguments是以对象形式】
23. Object.assign()
object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别
Object.assign()方法接收的第一个参数作为目标对象,后面的所有参数作为源对象。然后把所有的源对象合并到目标对象中。它会修改了一个对象,因此会触发 ES6 setter。
扩展操作符(…)使用它时,数组或对象中的每一个值都会被拷贝到一个新的数组或对象中。它不复制继承的属性或类的属性,但是它会复制ES6的 symbols 属性。
24. Map和普通对象、WeakMap的区别?
24.1、Map和Object的区别
a、同名碰撞
对象其实就是在堆开辟了一块内存,其实Map的键存的就是这块内存的地址。只要地址不一样,就是两个不同的键,这就解决了同名属性的碰撞问题,而传统的Object显然做不到这一点。
b、键的类型
Map的键可以是任意值,包括函数、对象或任意基本类型。
Object 的键必须是 String 或是Symbol。
c、键的顺序
Map 中的 key 是有序的。因此,当迭代的时候, Map 对象以插入的顺序返回键值。
Object 的键是无序的
d、Size
Map 的键值对个数可以轻易地通过size 属性获取
Object 的键值对个数只能手动计算
e、迭代
Map 是 iterable 的,所以可以直接被迭代,可用for...of遍历
Object不是 iterable,不可以被迭代,不能用for...of遍历
24.2、Map
A、定义
map本质上就是键值对的集合,但是普通的Object中的键值对中的键只能是字符串。
而ES6提供的Map数据结构类似于对象,但是它的键不限制范围,可以是任意类型,是一种更加完善的Hash结构。
如果Map的键是一个原始数据类型,只要两个键严格相同,就视为是同一个键。
b、Map数据结构有以下操作方法
size:
map.size 返回Map结构的成员总数
set(key,value):
设置键名key对应的键值value,然后返回整个Map结构,如果key是简单数据类型且已经有值,则键值会被更新,否则就新生成该键,若键为引用数据类型,则不会被更改。
get(key):
该方法读取key对应的键值,如果找不到key,返回undefined
has(key):
该方法返回一个布尔值,表示某个键是否在当前Map对象中
delete(key):
该方法删除某个键,返回true,如果删除失败,返回false
clear():
map.clear()清除所有成员,没有返回值
c、Map结构原生提供三个遍历器生成函数和一个遍历方法
keys():
返回键名的遍历器
values():
返回键值的遍历器
entries():
返回所有成员的遍历器
forEach():
遍历Map的所有成员
24.3、WeakMap
a、定义
WeakMap 对象也是一组键值对的集合,其中的键是弱引用的。其键必须是对象,原始数据类型不能作为key值,而值可以是任意的
b、weakMap对象有以下几种方法
set(key,value)
设置键名key对应的键值value,然后返回整个Map结构
get(key)
该方法读取key对应的键值,如果找不到key,返回undefined
has(key)
该方法返回一个布尔值,表示某个键是否在当前Map对象中
delete(key)
该方法删除某个键,返回true,如果删除失败,返回false
c、目的
WeakMap的设计目的在于,有时想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用。
一旦不再需要这两个对象,就必须手动删除这个引用,否则垃圾回收机制就不会释放对象占用的内存。
而WeakMap的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。
因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。
也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用
25. 循环语法比较及使用场景(for、forEach、map的区别/ for...in、for...of的区别)
25.1、for、forEach、map的区别
for、forEach、map都是用来循环的,性能依次递增。
后二只能循环数组,性能比for好很多,但缺点是不能及时跳出循环,必须循环全部结束才算完。
for 可以中断某一次 或全部循环
forEach()方法会针对每一个元素执行提供的函数,对数据的操作会改变原数组,该方法没有返回值
map()方法不会改变原数组的值,有返回值,返回一个新数组,新数组中的值为原数组调用函数处理之后的值
25.2、for...in、for...of区别
for… in 会遍历对象的整个原型链,性能非常差不推荐使用,而 for … of 只遍历当前对象不会遍历原型链
对于数组的遍历,for…in 会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for…of 只返回数组的下标对应的属性值
26. forEach可以中断吗
不可以中断 没有返回值 ,不可以链式调用
27. reduce() 和 reduceRight()
不改变原数组
数组方法,reduce()对数组正序操作;reduceRight()对数组逆序操作
28. e.target和e.currentTarget的区别?
用于处理事件代理
e.target:当前点击对象
e.currentTarget: 绑定事件监听的那个对象
29. 阻止事件冒泡和阻止默认事件
- Event.preventDefault() 取消浏览器对当前事件的默认行为。
- 阻止事件冒泡event.stopPropagation()
30. event.stopPropagation()和stopImmediatePropagation()
- 阻止事件冒泡event.stopPropagation()
- Event.stopImmediatePropagation() 阻止同一个事件的其他监听函数被调用,不管监听函数定义在当前节点还是其他节点。也能阻止事件的冒泡。
31. HTMLCollection和NodeList的区别?
- HTMLCollection是 HTML 元素的集合。(仅包含元素)
- NodeList 是一个文档节点的集合。
标签:Map,key,对象,Object,无以至千里,js,键值,数组,不积跬步 From: https://www.cnblogs.com/gs-top/p/16953044.html