首页 > 其他分享 >不积跬步,无以至千里【3】【js-2】

不积跬步,无以至千里【3】【js-2】

时间:2022-12-15 11:58:06浏览次数:48  
标签:Map key 对象 Object 无以至千里 js 键值 数组 不积跬步

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的区别?

  1. mouseover鼠标经过自身盒子会触发,经过子盒子还会触发。   鼠标移动就触发
  2. 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的区别?

  1. HTMLCollection是 HTML 元素的集合。(仅包含元素)
  2. NodeList 是一个文档节点的集合。

 

标签:Map,key,对象,Object,无以至千里,js,键值,数组,不积跬步
From: https://www.cnblogs.com/gs-top/p/16953044.html

相关文章