ES6用法,面试大全

<template>
  <div class="wrapper">
    <h3>ES6是什么</h3>
    <div>
      1 ES6是什么
      ES6是新一代的JS语言标准,对分JS语言核心内容做了升级优化,规范了JS使用标准,新增
      了JS原生方法,使得JS使用更加规范,更加优雅,更适合大型应用的开发 
      
      2
      ES5、ES6和ES2015有什么区别
      ES5泛指上一代语言标准。ES2015可以理解为ES5和ES6的时间分界线。
      ES6泛指下一代JS语言标准,包含ES2015、ES2016、ES2017、ES2018等。现阶段在绝大部分场景下,

      3 babel是什么?babel是一个 ES6 转码器,可以将 ES6 代码转为 ES5
      代码,以便兼容那些还没支持ES6的平台 Babel 是一个广泛使用的 ES6
      转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行。
      这意味着,可以用 ES6 的方式编写程序,又不用担心现有环境是否支持。 //
      转码前,使用了箭头函数 array.map(item => item + 1); // 转码后,Babel
      将其转为普通函数,就能在不支持箭头函数的 JavaScript 环境执行了
      array.map(function (item) { return item + 1; }); 安装命令 npm install
      --save-dev @babel/core 所有 Babel 工具和模块的使用,都必须先写好.babelrc。

      4 let有什么用,有了var为什么还要用let?
      答:在ES6之前,声明变量只能用var,var方式声明变量其实是很不合理的,准确的说,是
      因为ES5里面没有块级作用域是很不合理的,甚至可以说是一个语言层面的bug(这也是很多
      c++、java开发人员看不懂,也瞧不起JS语言的劣势之一)。没有块级作用域会带来很多难
      以理解的问题,比如for循环var变量泄露,变量覆盖等问题。let
      声明的变量拥有自己的块级作用域,且修复了var声明变量带来的变量提升问题。

      5ES6对String字符串类型做的常用升级优化
      5.1在拼接大段字符串时,用反斜杠(`)取代以往的字符串相加的形式,能保留所有空格和换行,
      使得字符串拼接看起来更加直观,更加优雅;vue也采用${}拼接
      5.2ES6在String原型上新增了includes()方法,
      console.log(array.includes("varfor")); //返回是boolean
      用于取代传统的只能用indexOf查找包含字符
      的方法(indexOf返回-1表示没查到不如includes方法返回false更明确,语义更清晰),
      5.2还新增了startsWith(), endsWith(),
      padStart(),padEnd()(在头部或尾部补全字符串),repeat()等方法,
      可方便的用于查找,补全字符串。 
      
      6. ES6对Array数组类型做的常用升级优化
      优化部分 6.1 数组解构赋值 ES6可以直接以let [a,b,c] =
      [1,2,3]形式进行变量赋值,在声明较多变量时,不用再写很多let(var),
      且映射关系清晰,且支持赋默认值 6.2
      扩展运算符。ES6新增的扩展运算符(...)(重要),可以轻松的实现数组和松散序列的相互转化,
      可以取代arguments对象和apply方法,轻松获取未知参数个数情况下的参数集合。
      (尤其是在ES5中,arguments并不是一个真正的数组,而是一个类数组的对象,
      但是扩展运算符的逆运算却可以返回一个真正的数组)。扩展运算符还可以
      轻松方便的实现数组的复制和解构赋值(let a = [2,3,4]; let b = [...a])。
      2、升级部分:
      ES6在Array原型上新增了find()方法,用于取代传统的只能用indexOf查找包含数组项目的方法,
      且修复了indexOf查找不到NaN的bug([NaN].indexOf(NaN) ===
      -1).此外还新增了copyWithin(), includes(),
      fill(),flat()等方法,可方便的用于字符串的查找,补全,转换等。 
      
      7 ES6对Function函数类型做的常用升级优化 1、优化部分: a.
      箭头函数**(核心)**。箭头函数是ES6核心的升级项之一,箭头函数里没有自己的this,
      这改变了以往JS函数中最让人难以理解的this运行机制。主要优化点:
      Ⅰ.
      箭头函数内的this指向的是函数定义时所在的对象,而不是函数执行时所在的对象。ES5函数里的
      this总是指向函数执行时所在的对象,这使得在很多情况下this的指向变得很难理解,尤其
      是非严格模式情况下,this有时候会指向全局对象,这甚至也可以归结为语言层面的bug之一。
      ES6的箭头函数优化了这一点,它的内部没有自己的this,这也就导致了this总是指向上一层的this,
      如果上一层还是箭头函数,则继续向上指,直到指向到有自己this的函数为止,并作为自己的this。
      Ⅱ. 箭头函数不能用作构造函数,因为它没有自己的this,无法实例化。 Ⅲ.
      也是因为箭头函数没有自己的this,所以箭头函数
      内也不存在arguments对象。(可以用扩展运算符代替) b.
      函数默认赋值。ES6之前,函数的形参是无法给默认值得,只能在函数内部通过变通方法实现。
      ES6以更简洁更明确的方式进行函数默认赋值。
      function es6Fuc (x, y = 'default') { console.log(x, y); } es6Fuc(4) // 4,
      default 
      
      8、问:Set是什么,有什么作用?
      答:Set是ES6引入的一种类似Array的新的数据结构,Set实例的成员类似于数组item成员,
      区别是Set实例的成员都是唯一,不重复的。这个特性可以轻松地实现数组去重。

      9、问:Map是什么,有什么作用?
      答:Map是ES6引入的一种类似Object的新的数据结构,Map可以理解为是Object的超集,打破了以
      传统键值对形式定义对象,对象的key不再局限于字符串,也可以是Object。可以更加全面的描述对象的属性。

      10、问:Promise是什么,有什么作用?
      答:Promise是ES6引入的一个新的对象,他的主要作用是用来解决JS异步机制里,回调机制产生的
      “回调地狱”。它并不是什么突破性的API,只是封装了异步回调形式,使得异步回调可以写的更
      加优雅,可读性更高,而且可以链式调用。

      11 for...in 和for...of有什么区别 for..in仅仅可以遍历对象;
      for...of遍历对象 .数组也可以用 12 async函数是什么,有什么作用

      async函数可以理解为内置自动执行器的Generator函数语法糖,它配合ES6的Promise
      近乎完美的实现了异步编程解决方案。

      12、module、export、import是什么,有什么作用?
      答:module、export、import是ES6用来统一前端模块化方案的设计思路和实现方案
      export、import的出现统一了前端模块化的实现方案,整合规范了浏览器/服务端的
      模块化方法,用来取代传统的AMD/CMD、requireJS、seaJS、commondJS等等一列前
      端模块不同的实现方案,使前端模块化更加统一规范,JS也能更加能实现大型的应用程序开发。
      import引入的模块是静态加载(编译阶段加载)而不是动态加载(运行时加载)。
      import引入export导出的接口值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

      13日常前端代码开发中,有哪些值得用ES6去改进的编程优化或者规范
      常用箭头函数来取代var self = this;的做法。 常用let取代var命令。
      常用数组/对象的结构赋值来命名变量,结构更清晰,语义更明确,可读性更好。
      在长字符串多变量组合场合,用模板字符串来取代字符串累加,能取得更好地效果和阅读体验。
      用Class类取代传统的构造函数,来生成实例化对象。
      在大型应用开发中,要保持module模块化开发思维,分清模块之间的关系,常用import、export方法。
    </div>
  </div>
</template>
<script>
export default {
  name: "Table",

  data() {
    return {};
  },
  methods: {
    forFun41() {
      const array = [
        { name: "产品特性1", text: "varfor1" },
        { name: "产品特性2", text: "varfor2" },
        { name: "产品特性3", text: "varfor3" },
      ];
      for (var index = 0; index < array.length; index++) {
        const element = array[index];
        console.log(index, element);
      }
      console.log(index); //var变量泄露
    },
    letFun42() {
      const array = [
        { name: "产品特性1", text: "varfor1" },
        { name: "产品特性2", text: "varfor2" },
        { name: "产品特性3", text: "varfor3" },
      ];
      for (let index = 0; index < array.length; index++) {
        const element = array[index];
        console.log(index, element);
      }
      //console.log(index); //报错undefined
    },
    includesFun52() {
      const array = `产品特性1产品特性2产品特性3varfor3varfor2varfor1`;
      console.log(array.includes("varfor")); //true
    },
    abfunction6() {
      let a = [2, 3, 4];
      let b = [...a];
      console.log(a, b);
      a[2] = 5;
      //b不会改变
      console.log(a, b);

      let array1 = [
        { name: "产品特性1", text: "varfor1" },
        { name: "产品特性2", text: "varfor2" },
        { name: "产品特性3", text: "varfor3" },
      ];
      let array2 = [...array1];
      console.log(array1, array2);
      array1[2].text = "varfor5";
      //array2会改变
      console.log(array1, array2);

      let obj1 = { name: "产品特性1", text: "varfor1" };

      let obj2 = { ...obj1 };
      console.log(obj1, obj2);
      obj1.text = "varfor5";
      //obj2不会改变
      console.log(obj1, obj2);

      //Object.assign() 浅拷贝 浅复制,也可以实现数组的克隆
      let arr = ["sdsd", 123, 123, 123];
      let arr1 = [];
      Object.assign(arr1, arr);
      arr[1] = "aaaa";
      console.log(arr, arr1); // [ 'sdsd', 'aaaa', 123, 123 ] [ 'sdsd', 123, 123, 123 ]
    },
  },
  computed: {},
  mounted() {
    // this.forFun41();
    // this.letFun42();
    // this.includesFun52();
    this.abfunction6();
  },
};
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小云儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值