持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
1.ES6新增了什么?
-
新增声明命令let,const
-
模板字符串:``
-
函数扩展
- 默认参数
- 箭头函数
-
对象扩展
- 属性简写:对象的键值名相同,可以只写一个。
- 方法简写:省略冒号和function关键字。
- Object.keys()/Object.values():获取对象的所有键/值,返回一个数组。
- Object.assign():浅拷贝一个对象。
-
for of 循环
-
import、export。模块化的导入导出
-
Promise
-
解构赋值
-
Set数据结构
-
展开运算符
所有数据是唯一的,都是值。且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
*/