总结
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
4 选择器优先级
important>内联>id>class = 属性 = 伪类 >标签 = 伪元素 > 通配符(*)
-
important声明 1,0,0,0
-
ID选择器 0,1,0,0
-
类选择器 0,0,1,0
-
伪类选择器 0,0,1,0
-
属性选择器 0,0,1,0
-
标签选择器 0,0,0,1
-
伪元素选择器 0,0,0,1
-
通配符选择器 0,0,0,0
-
有人说_*外部样式<内部样式,其实不然,其实外部样式=内部样式,_*谁在前面定义谁就被覆盖
-
class = 属性 = 伪类:例如.className的优先级和[class=‘className’]和:hover的优先级是一样的,甚至.className的优先级和[id=‘idName’]和:hover的优先级也是一样
-
空格和>的优先级是一样的,例如body b和body>b是一样的优先级
-
和+的优先级是一样的,例如bodyb和body+b是一样的优先级
-
伪元素的优先级和标签选择器的优先级一样
5 forEach,map和filter的区别
forEach
遍历数组,参数为一个回调函数,回调函数接收三个参数,当前元素,元素索引,整个数组, forEach 在对 item 进行修改的时候,如果 item 是原始类型的值,item 对应的 的内存地址实际并没有变化,
如果 item 是 引用类型的值,item 对应多的内存地址也没有变化,但是对应的值,已经重写了
map
与forEach
类似,遍历数组,但其回调函数的返回值会组成一个新数组,新数组的索引结构和原数组一致,原数组不变;
filter
会返回原数组的一个子集,回调函数用于逻辑判断,返回true
则将当前元素添加到返回数组中,否则排除当前元素,原数组不变。
6 如何防止map后的数组修改原数组
这是会被修改的写法
这是防止修改的写法
7 评价一下三种方法实现继承的优缺点,并改进
方法 1:
-
优点:正确设置原型链实现继承
-
优点:父类实例属性得到继承,原型链查找效率提高,也能为一些属性提供合理的默认值
-
缺点:父类实例属性为引用类型时,不恰当地修改会导致所有子类被修改
-
缺点:创建父类实例作为子类原型时,可能无法确定构造函数需要的合理参数,这样提供的参数继承给子类没有实际意义,当子类需要这些参数时应该在构造函数中进行初始化和设置
-
总结:继承应该是继承方法而不是属性,为子类设置父类实例属性应该是通过在子类构造函数中调用父类构造函数进行初始化
方法 2:
-
优点:正确设置原型链实现继承
-
缺点:父类构造函数原型与子类相同。修改子类原型添加方法会修改父类
方法 3:
-
优点:正确设置原型链且避免方法 1.2 中的缺点
-
缺点:ES5 方法需要注意兼容性
改进:
- 所有三种方法应该在子类构造函数中调用父类构造函数实现实例属性初始化
-
用新创建的对象替代子类默认原型,设置
Rect.prototype.constructor = Rect;
保证一致性 -
第三种方法的 polyfill:
8 如何判断一个对象是否为数组
如果浏览器支持 Array.isArray()可以直接判断否则需进行必要判断
这里我有个疑问就是
Object.prototype.toString.call(arg) === ‘[object Array]’;
总结
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
‘[object Array]’;
总结
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-TCaUbAEQ-1715269387357)]