面试中的高频小知识

133 阅读2分钟

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」。

js中的可枚举属性和不可枚举属性

在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等

属性的枚举性会影响以下三个函数的结果:

for…in

Object.keys()

JSON.stringify

注意:

var kxy = new Person();
Object.defineProperty(kxy, "sex", {
    value: "female",
    enumerable: false
});

defineProperty为对象定义了一个名为”sex”的不可枚举属性

判断数据类型的方法

  1. typeof() 特例:typeof(null) =>object,typeof([]) =>object
  2. instanceof(),通过原型链检查
  3. 利用constructor,找到其构造函数
  4. Object.propertype.toString方法返回对象的类型字符串,Object.propertype.toString.call(**);

5.call、apply、bind的区别

三个的作用都是用于改变this的指向问题,但是有一丁点差异,apply和call就是参数的差异,bind和call就是调用方式的差异。

  • fun.apply(thisArg,[argsArray])
  • fun.call(thisArg, arg1, arg2, ...)
  • fun.bind(thisArg, arg1, arg2, ...)//必须手动去调用

6.new的过程

var a = new myFunction("Li","Cherry");
​
new myFunction{
    var obj = {};
    obj.__proto__ = myFunction.prototype;
    var result = myFunction.call(obj,"Li","Cherry");
    return typeof result === 'obj'? result : obj;
}
​
  1. 创建一个空对象 obj;
  2. 将新创建的空对象的隐式原型指向其构造函数的显示原型。
  3. 使用 call 改变 this 的指向
  4. 如果无返回值或者返回一个非对象值,则将 obj 返回作为新对象;如果返回值是一个新对象的话那么直接直接返回该对象。

8.防抖he节流

  • 防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

    应用场景:用户在填写表单时,输入一个字母就发送一次请求,浪费请求资源,实际上,用户是想输入完整字符的时候才发送请求,这时候就用到防抖了。

  • 节流:在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

    应用场景:鼠标不断点击触发;监听滚动事件

9.浏览器渲染页面的过程

浏览器请求、加载、渲染一个页面,时间花在下面五件事情上:

  1. DNS 查询
  2. TCP 连接
  3. HTTP 请求即响应
  4. 服务器响应
  5. 客户端渲染

浏览器对内容的渲染,这一部分(渲染树构建、布局及绘制),又可以分为下面五个步骤:

  1. 处理 HTML 标记并构建 DOM 树。
  2. 处理 CSS 标记并构建 CSSOM 树。
  3. 将 DOM 与 CSSOM 合并成一个渲染树。
  4. 根据渲染树来布局,以计算每个节点的几何信息。
  5. 将各个节点绘制到屏幕上。