前端面试题(17)ES6

21.梳理下面的代码,最终输出的数据是什么?请说明原因

        let person = {
            'pName': 'zhangsan',
            'pAge': 20,
            'pSex': 'nale'
        }
        let {
            pName: name,
            pAge
        } = person
        console.log(name);
        console.log(pName);
        console.log(pAge);

第一个输出zhangsan 别名输出,给pName的值赋值到一个名称为name变量中
第二个错误,一旦出现了别名赋值,原来的属性名称就不能使用
第三个 20
解构赋值中,如果给一个属性添加了别名,属性名称就不能再使用了,所以pName报错

22.解析下面的代码,最终输出什么结果?为什么

      for(var i=0;i<10;i++) {
            setTimeout(function(){
                console.log(i);
            })
        }
        for(let j=0;j<10;j++) {
            setTimeout(function(){
                console.log(j);
            })
        }

1.10 …10 var 声明的变量的作用域只有全局和局部,for循环中多次循环使用的是同一个作用域空间,setTimout()延时函数会在循环全部执行完成后输出,循环中最后一次判断时i=10<10跳出循环,此时最终i的值是10
2.0,1,2,…9 let声明的变量存在块级作用域,for循环每次循环都是一个独立的作用域,延时函数执行的时候相当于在10个不同的作用域中执行,最终输出了差异化的数据

23.过年了,小明一家均长了一岁,重新记录到一个新的变量中,请编写代码实现

let person = [{ name: '张三', age: 30, sex: '男' },
    { name: '李四', age: 34, sex: '女' },
    { name: '小明', age: 12, sex: '男' }
]
var person2 = person.map(value => {
    return {
        ...value,
        age: value.age + 1
    }
})
console.log(person2);

24.ES6中对字符串进行了哪些扩展

ES6中提供了模板字符串语法,可以让变量在字符串的内部使用其固定语法直接参与运算,优化了变量在字符串中的处理方式,同时ES6中针对字符串的常见操作提供了一些扩展函数如startWith()/endWith()/padStart()/padEnd()…

25.简述你对Symbol的认识

Symbol是ES6中出现的新的语法,表示一种获取唯一值对象的基本数据类型,经常用于模拟类型中私有属性而出现,如可遍历对象中的迭代器函数属性就是Symbol实现

26.简述var 和let声明变量的优缺点

var 是原生JS中声明变量推荐的方式,let是ES6语法中推荐的声明变量的方式,项目开发中优先推荐使用let声明并使用变量
var声明的变量最大的优点就是声明预解析,可以最大程度的保证声明的数据在其作用域空间中不会出现语法问题
let声明的变量最大的优点是明确了具体的作用域空间,同时强制确定了变量必须先声明后使用的规则,所以在新项目中使用优先推荐let关键词

27.for…of循环的本质是什么,如何让自己定义的类创建的对象支持for…of循环

for…of循环是ES6语法中提供的一种新的数据遍历语法,可以很方便的对比较集中的数据进行遍历操作,底层是通过Symbol定义的迭代器函数实现的
自定义类型如果要支持for…of循环遍历的功能,可以在类型中按照固定语法声明自定义的遍历函数[Symbol.iterator]实现遍历功能

28.简述原生JS面向对象和ES6新的面向对象语法的优缺点

原生JS本质上没有面向对象的独立的语法,主要通过函数结合原型链进行模拟的面向对象,在开发过程中的优缺点如下:
优点:语法简单,通过原生函数语法和原型链的操作直接实现,本质上是函数的扩展
缺点:思想上的转换,将函数当成类型使用,使用方式上和语法上都有一定的扩展,原生JS面向对象的实现方式上门槛较高

ES6语法中面向对象提供了独立的语法
优点:面向对象有自己独立的语法,可以很方便的完成面向对象的程序设计开发
缺点:新的语法学习成本提高了,底层的实现并没有进行重构,所以底层原理的理解上相比叫原生JS语法成本提高了
所以开发过程中如果JS用于浏览器一侧的效果开发,优先推荐函数式开发,如果是用于NodeJS的服务端的开发,优先推荐使用面向对象的语法开发

#29.简述对ES6的认识

ES6是一种新的客户端脚本语言标准,语法上对原生JS进行了扩展,如提供了声明变量的let关键字和声明常量的const关键字,对函数进行了扩展,提供了箭头函数,函数参数默认值等,对对象进行了扩展提供了简洁操作语法,扩展了字符串操作函数,扩展了数组操作函数,扩展了Object操作函数等等,提供了class类和对象的新的语法标准等

30.var、let、const的区别

var是原生JavaScript中声明变量的关键字
let 是ES6中升级出现的声明变量的关键字,提供了块级作用域,出现了变量声明暂时性死区,限制了变量的多次声明等功能
const 是ES6语法中提供的用于声明常量的关键字

31.使用箭头函数的注意事项有哪些

箭头函数是ES6语法中出现的用于简化函数操作的一种新语法,使用的过程中需要注意内部this关键字的指向问题,需要注意语法中单个参数的简化语法,单行代码的情况下简化语法和返回值问题

32.使用解构赋值的操作语法,如何交换两个变量中的数据

let a = 1,b=2
[a,b] = [b,a]

33.call()\apply()\bind()有什么区别

call/apply/bind都可以改变this的指向,区别是参数的操作形式不同

上一篇
下一篇(git篇)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值