ES6常见的面试题

1.es6熟悉吗,说几个es6的新增方法

(1)新增声明命令let和const

在es6中通常用 let 和 const 来声明,let 表示变量、const 表示常量。

特点:

let 和 const 都是块级作用域。以{}代码块作为作用域范围 只能在代码块里面使用。
不存在变量提升,只能先声明再使用,否则会报错。在代码块内,在声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
在同一个代码块内,不允许重复声明。
const声明的是一个只读常量,在声明时就需要赋值。(如果 const 的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址不能改变,而变量成员是可以修改的。)

(2)模板字符串(Template String)

用一对反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,也可以在字符串中嵌入变量,js表达式或函数,变量、js表达式或函数需要写在${ }中。

(3)函数的扩展

  • 函数的默认参数

ES6为参数提供了默认值。在定义函数时便初始化了这个参数,以便在参数没有被传递进去时使用。

箭头函数 
在es6中,提供了一种简洁的函数写法,我们称作“箭头函数”。

写法:函数名=(形参)=>{……}     当函数体中只有一个表达式时,{}和return可以省略,当函数体中形参只有一个时,()可以省略。

特点:箭头函数中的this始终指向箭头函数定义时的离this最近的一个函数,如果没有最近的函数就指向window。

4)对象的扩展 

  • 属性的简写。ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。
  • 
    var foo = 'bar';
    var baz = {foo};  //等同于  var baz = {foo: foo};
  •  

  • 方法的简写。省略冒号与function关键字。
  • 
    var o = {
      method() {
        return "Hello!";
      }
    };
     
    // 等同于
    var o = {
      method: function() {
        return "Hello!";
      }
    };

     

  • Object.keys()方法,获取对象的所有属性名或方法名(不包括原形的内容),返回一个数组。
  • var obj={name: "john", age: "21", getName: function () { alert(this.name)}};
    console.log(Object.keys(obj));    // ["name", "age", "getName"]
    console.log(Object.keys(obj).length);    //3
     
    console.log(Object.keys(["aa", "bb", "cc"]));    //["0", "1", "2"]
    console.log(Object.keys("abcdef"));    //["0", "1", "2", "3", "4", "5"]

    Object.assign (),assign方法将多个原对象的属性和方法都合并到了目标对象上面。可以接收多个参数,第一个参数是目标对象,后面的都是源对象。

  • 
    var target  = {}; //目标对象
    var source1 = {name : 'ming', age: '19'}; //源对象1
    var source2 = {sex : '女'}; //源对象2
    var source3 = {sex : '男'}; //源对象3,和source2中的对象有同名属性sex
    Object.assign(target,source1,source2,source3);
     
    console.log(target);    //{name : 'ming', age: '19', sex: '男'}

    (5)for...of  循环

  • 
    var arr=["小林","小吴","小佳"];
    for(var v of arr){
        console.log(v);	
    }
    //小林 
    //小吴 
    //小佳

    (6)import和export

    ES6标准中,JavaScript原生支持模块(module)了。这种将JS代码分割成不同功能的小块进行模块化,将不同功能的代码分别写在不同文件中,各模块只需导出公共接口部分,然后通过模块的导入的方式可以在其他地方使用。

    export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口。

    import用于在一个模块中加载另一个含有export接口的模块。

    import和export命令只能在模块的顶部,不能在代码块之中。

    (7)Promise对象

    Promise是异步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

    它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败。

    Promise 构造函数包含一个参数和一个带有 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切都正常,则调用 resolve,否则调用 reject。对于已经实例化过的 promise 对象可以调用 promise.then() 方法,传递 resolve 和 reject 方法作为回调。then()方法接收两个参数:onResolve和onReject,分别代表当前 promise 对象在成功或失败时。

    (8)解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

  • 数组的解构赋值
  • 数组中的值会自动被解析到对应接收该值的变量中,数组的解构赋值要一一对应 如果有对应不上的就是undefined

    (9)set数据结构

    Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数。

    属性和方法:

    size 数据的长度
    add() 添加某个值,返回 Set 结构本身。
    delete() 删除某个值,返回一个布尔值,表示删除是否成功。
    has() 查找某条数据,返回一个布尔值。
    clear() 清除所有成员,没有返回值。
    应用:数组去重。

    es6所写的类相比于es5的优点:

    (1)区别于函数,更加专业化(类似于JAVA中的类)

    (2)写法更加简便,更加容易实现类的继承

  • 49
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值