常见前端基础面试题(HTML,CSS,JS)(二)

ES6 新增哪些东西

  1. 箭头函数
  2. 字符串模板
  3. 支持模块化(import、export
  4. 类(class、constructor、extends
  5. let、const 关键字
  6. 新增一些数组、字符串等内置构造函数方法,例如 Array.fromArray.of 、Math.signMath.trunc 等
  7. 新增一些语法,例如扩展操作符、解构、函数默认参数等
  8. 新增一种基本数据类型 Symbol
  9. 新增元编程相关,例如 proxyReflect
  10. Set 和 Map 数据结构
  11. Promise
  12. Generator 生成器

let const var 的区别?什么是块级作用域?如何用?

  • var 定义的变量,是函数作用域,没有块的概念,可以跨块访问, 不能跨函数访问,有变量提升。

  • let 定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明。

  • const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改,无变量提升,不可以重复声明。

  • var不存在暂时性死区,letconst存在暂时性死区

  • letconst创建的全局变量没有给window设置相应的属性

暂时性死区:使用 let / const 命令声明变量之前,该变量都是不可用的

箭头函数与普通函数的区别

  1. 箭头函数没有自己的this、会捕获其所在的上下文的this值,作为自己的this值

  2. 箭头函数继承来的this指向永远不会改变

  3. call()、apply()、bind()等方法不能改变箭头函数中this的指向

  4. 箭头函数是匿名函数,不能作为构造函数,不能使用new

  5. 箭头函数没有自己的arguments

  6. 箭头函数没有prototype(原型)

  7. 箭头函数不能用作Generator函数,不能使用yeild关键字

bind,apply,call三者的区别

  1. 三者都可以改变函数的this对象指向

  2. 三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefinednull,则默认指向全局window

  3. 三者都可以传参,但是apply是数组,而call是参数列表,且applycall是一次性传入参数,而bind可以分为多次传入

  4. bind是返回绑定this之后的函数,applycall 则是立即执行

是否了解 JavaScript 中的包装类型?

包装对象 : 就是当基本类型以对象的方式去使用时,JavaScript 会转换成对应的包装类型,相当于 new 一个对象,内容和基本类型的内容一样,然后当操作完成再去访问的时候,这个临时对象会被销毁,然后再访问时候就是 undefined

代码理解:

var str = 'hello';
str.number = 10; //假设我们想给字符串添加一个属性 number ,后台会有如下步骤
(
    var _str = new String('hello'); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象
    _str.number = 10; // 2 通过这个对象调用包装对象下的方法 但结果并没有被任何东西保存
    _str =null; // 3 这个对象又被销毁
)
console.log(str.number); // undefined  当执行到这一句的时候,因为基本类型本来没有属性,后台又会重新重复上面的步骤
(
   var str = new String('hello');// 1 找到基本包装对象,然后又新开辟一个内存,创建一个值为 hello 对象
   str.number = undefined;// 2 因为包装对象下面没有 number 这个属性,所以又会重新添加,因为没有值,所以值是未定义;然后弹出结果
   str =null; // 3 这个对象又被销毁
)

你可能感兴趣的:(面试,前端开发,前端,html,css,html5,css3,javascript)