js

基础面试题

css 面试题

js 面试题

JavaScript 有几种类型的值?,你能画一下他们的内存图吗

  • 原始数据类型(Undefined,Null,Boolean,Number、String)-- 栈
  • 引用数据类型(对象、数组和函数)-- 堆
  • 两种类型的区别是:存储位置不同:
  • 原始数据类型是直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据;
  • 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;
  • 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。
  • 当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

 

 

assign

 

array.from

 

 

 

介绍JS有哪些内置对象

  • 数据封装类对象: String Number Boolean Array Object
  • 其他对象: Function Math Date Error Arguments RegExp

string number boolean undefined null

  •  

 

dom 事件模型 

  • 冒泡 捕获

dom 事件流  

  • 事件捕获的流程

dom 事件级别 

  • dom 0  onclick
  • dom2 addEventListener     Ie attatchEvent
  • dom 3   keyup   鼠标

  • 捕获的流程 window —>document 

如何获取body 对象,如何获取html对象

html 节点document.documentElement

 

null、undefined及未声明变量之间的区别。如何区分?

  • 未声明变量默认值为undefined
  • typeof null === 'object' // true
  • typeof undefined === 'undefined' // true

==和===的区别

  • ==比较之前会先进行类型转换,即不会对类型进行比较。例如:
      12 == '12'  // true
  •   true == 1   // true
  •   false == '0' // true
  • 复制代码
  • ===会比较数值和类型。例如:
      12 === '12' // false
  •   12 === 12 // true
  •   true === 1 // false
  •   false === '0' // false
  • 复制代码

如何注册事件

 

怎么自定义事件

 

call,applybind的作用是什么?两者区别是什么?

.call和.apply都用于调用函数,第一个参数将用作函数内 this 的值。然而,.call接受逗号分隔的参数作为后面的参数,而.apply接受一个参数数组作为后面的参数。一个简单的记忆方法是,从call中的 C 联想到逗号分隔(comma-separated),从apply中的 A 联想到数组(array)。

function add(a, b) {

return a + b;

}

 

console.log(add.call(null, 1, 2)); // 3

console.log(add.apply(null, [1, 2])); // 3

复制代码

.call和.apply是立即执行的, .bind 返回函数的副本

 

创建对象几种方法

1 字面量对象new object 传参 2  构造函数 new  3 Object.create

什么原型

什么是构造函数

什么是示例

什么是原型链

 

function onLoad() {

  var arr = document.getElementsByTagName("p");

  for (var i = 0; i < arr.length; i++) {

    arr[i].onclick = function () {

      alert(i);

    }

  }

}

 

函数节流

函数防抖

 

什么是函数节流?介绍一下应用场景和原理?

  • 函数节流(throttle)是指阻止一个函数在很短时间间隔内连续调用。 只有当上一次函数执行后达到规定的时间间隔,才能进行下一次调用。 但要保证一个累计最小调用间隔(否则拖拽类的节流都将无连续效果)
  • 函数节流用于 onresize, onscroll 等短时间内会多次触发的事件
  • 函数节流的原理:使用定时器做时间节流。 当触发一个事件时,先用 setTimout 让这个事件延迟一小段时间再执行。 如果在这个时间间隔内又触发了事件,就 clearTimeout 原来的定时器, 再 setTimeout 一个新的定时器重复以上流程。

 

instanceOf 的原理

 

 

new 运算符

声明一个对象

 

 

箭头函数需要注意的地方

*当要求动态上下文的时候,就不能够使用箭头函数,也就是this的固定化。

1、在使用=>定义函数的时候,this的指向是定义时所在的对象,而不是使用时所在的对象;
2、不能够用作构造函数,这就是说,不能够使用new命令,否则就会抛出一个错误;
3、不能够使用arguments对象;
4、不能使用yield命令;

 

 

letconst

 

 

手写一个promise

 

 

var promise = new Promise((resolve, reject) => {

  if (操作成功) {

    resolve(value)

  } else {

    reject(error)

  }

})

promise.then(function (value) {

  // success

}, function (value) {

  // failure

})

 

promise 有几个状态?

 promise有2个状态,成功和失败,怎么让一个函数无论成功还是失败都能被调用?

 

Promise.prototype.finally()

 

错误监控

 

service-worker