JS面试复习,看这个系列就够了!(二)

212 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

1.ES6新增了什么?

  1. 新增声明命令let,const

  2. 模板字符串:``

  3. 函数扩展

    • 默认参数
    • 箭头函数
  4. 对象扩展

    • 属性简写:对象的键值名相同,可以只写一个。
    • 方法简写:省略冒号和function关键字。
    • Object.keys()/Object.values():获取对象的所有键/值,返回一个数组。
    • Object.assign():浅拷贝一个对象。
  5. for of 循环

  6. import、export。模块化的导入导出

  7. Promise

  8. 解构赋值

  9. Set数据结构

  10. 展开运算符

image.png

所有数据是唯一的,都是值。且Set()本身是一个构造函数

2.caller和callee

caller 直接翻译为调用者,callee 翻译为被召者。

caller

返回一个对函数的引用,该函数调用了当前函数。

var a = function () {
  console.log(a.caller);
}
var b = function () {
  a();
}
b(); // [Function: b] 函数b里面调用了函数a
a(); // null

callee

var a = function () {
  console.log(arguments.callee);
  // [Function: a]
}
var b = function () {
  a();
}
b();

3.强制类型转换

  • 转化成字符串toString(),String()
  • 转化成数字Number(),parseInt(),parseFloat()
  • 转换成布尔类型Boolean()

4.typeof和instanceof的区别

typeof:可以准确的判断简单类型数据的类型,但是判断复杂数据类型时,除了Function都返回“object”。

instanceof就可以解决这个问题。

const a=function name() {}
const b=[1,2]
const c={}
console.log(typeof(a)) // function
console.log(typeof(b)) // object
console.log(typeof(c)) // object
console.log(b instanceof Array) // true
console.log(c instanceof Array) // false
console.log(c instanceof Object) // true

5.什么是回调函数?

函数A被当作实参传入函数B中,并在函数B中被调用,(用来完成某种任务),那么函数A被称为回调函数。

6.forof和forin的区别

ES5出来的forin循环主要是用来遍历对象:

const obj={name:'张三',gender:'male',age:30}
for(let key in obj){
  console.log(`这是key:${key}`)
  console.log(`这是value:${obj[key]}`)
}
/* 
这是key:name
这是value:张三
这是key:gender
这是value:male
这是key:age
这是value:30
*/

不用forin来遍历数组是因为会存在一些问题,比如索引index类型不是number而是string:

const arr=[1,2,3]
for(let index in arr){
  console.log(index+1)
}
/* 
01
11
21
*/

所以ES6出了forof循环,专门来解决forin不便于遍历数组的问题。举例:

const arr=[1,2,3]
for(let value of arr){
  console.log(value)
}
/* 
1
2
3
*/