- JavaScript 的数据对象有那些属性值?
writable:这个属性的值是否可以改。
configurable:这个属性的配置是否可以删除,修改。
enumerable:这个属性是否能在 for…in 循环中遍历出来或在 Object. keys 中列举出来。
value:属性值。
- 当我们需要一个属性的时,Javascript 引擎会先看当前对象中是否有这个属性, 如果没有的话,就会查找他的 Prototype 对象是否有这个属性。
function clone(proto) {
function Dummy() {}
Dummy.prototype = proto;
Dummy.prototype.constructor = Dummy;
return new Dummy(); //等价于Object.create(Person);
}
function object(old) {
function F() {}
F.prototype = old;
return new F();
}
var newObj = object(oldObject);
✨94. 请解释什么是事件代理
参考答案:
事件委托本质上是利用了浏览器事件冒泡的机制。因为事件在冒泡过程中会上传到父节点,并且父节点可以通过事件对象获取到
目标节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方式称为事件代理。
使用事件代理我们可以不必要为每一个子元素都绑定一个监听事件,这样减少了内存上的消耗。并且使用事件代理我们还可以实现事件的动态绑定,比如说新增了一个子节点,我们并不需要单独地为它添加一个监听事件,它所发生的事件会交给父元素中的监听函数来处理。
👓参考
✨95. offsetWidth/offsetHeight, clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别
参考答案:
offsetWidth / offsetHeight 返回值包含content + padding + border,效果与 e.getBoundingClientRect()相同
clientWidth / clientHeight 返回值只包含content + padding,如果有滚动条,也不包含滚动条
scrollWidth / scrollHeight 返回值包含content + padding + 溢出内容的尺⼨
✨96. 谈谈你对 AMD、CMD 的理解
参考答案:
-
CommonJS
是服务器端模块的规范,Node.js
采⽤了这个规范。 -
CommonJS
规范加载模 块是同步的,也就是说,只有加载完成,才能执⾏后⾯的操作。AMD 规范则是⾮同步加载 模块,允许指定回调函数
AMD 推荐的⻛格通过返回⼀个对象做为模块对象, CommonJS
的⻛格通过对module.exports
或 exports
的属性赋值来达到暴露模块对象的⽬的
es6模块 CommonJS、AMD、CMD
-
CommonJS
的规范中,每个 JavaScript ⽂件就是⼀个独⽴的模块上下⽂(module context
),在这个上下⽂中默认创建的属性都是私有的。也就是说,在⼀个⽂件定义的 变量(还包括函数和类),都是私有的,对其他⽂件是不可⻅的 -
CommonJS
是同步加载模块,在浏览器中会出现堵塞情况,所以不适⽤ -
AMD
异步,需要定义回调define
⽅式 -
es6
⼀个模块就是⼀个独⽴的⽂件,该⽂件内部的所有变量,外部⽆法获取。如果你希 望外部能够读取模块内部的某个变量,就必须使⽤export
关键字输出该变量es6
还可以导出类、⽅法,⾃动适⽤严格模式
✨97. web 开发中会话跟踪的方法有哪些
参考答案:
会话跟踪就是浏览器和服务器通信
1、cookie
2、session
3、隐藏input
4、url重写
5、ip地址
✨98. 说几条写 JavaScript 的基本规范?
参考答案:
1、不要在同一行声明多个变量
2、使用===或!==来比较
3、使用字面量的方式来创建对象、数组,替代new Array这种形式
4、不要使用全局函数
5、switch语句必须要带default分支
6、函数不应该有的时候有return,有的时候没有return
7、fon-in循环中的变量,用var关键字说明作用域,防止变量污染
8、变量的声明遵循驼峰命名法,用let替代val,声明构造函数时首字母大写,定义常量的时候尽量用大写字母,用_分割
9、三元表达式可以替代if语句
10、&&和||是可以短路的,使用&&时如果前面一个值是错的,那么后面的值不用判断,使用||时,如果前面一个值是对的,那么后面的值不用判断
11、比较数据类型以下6中情况是false,其他都是true------false、“”、0、null、undefined、NaN
算法刷题
大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
写在最后
最后,对所以做Java的朋友提几点建议,也是我的个人心得:
-
疯狂编程
-
学习效果可视化
-
写博客
-
阅读优秀代码
-
心态调整