1. 函数默认参数
如果有下面这个函数
function sum(a, b) {
return a+b
}
sum(1)
输出的是什么呢?
- 答案是NAN,因为b是undefined,1+undefined就是NAN
如何解决这个问题?
- ES6之前可以这么解决:
function sum(a, b) {
a = a || 0
b = b || 0
return a+b
}
sum(1)
这样就将a和b都设置了一个默认值0
- 有了ES6后可以这么解决:
function sum(a=0, b=0) {
return a+b
}
sum(1)
2. 剩余参数
如果要执行一个多个参数求和的函数,但是不知道参数多少个,在ES6之前是这么写的:
function sum (message) {
let result = 0
for(let i=1; i<arguments.length; i++) {
result += arguments[i]
}
return message + result
}
sum('结果是:', 1,2,3,4,5,6,7,8,9)
ES6之后可以如下写:
function sum (message, ...number) {
result = number.reduce((p, v) => p+v, 0)
return message + result
}
sum('结果是:', 1,2,3,4,5,6,7,8,9)
如何将伪数组变成真数组
在ES5最方便的方法是
let args = Array.prototype.slice.call(arguments)
ES6可以这么做
let args = Array.from(arguments)
更方便的方法是
let args = [...arguments]
3. 对象深浅拷贝
浅拷贝:
- Object.assign({}, objA)
let objA = {
name: {
x: 'a'
}
}
let objB = Object.assign({}, objA)
let objA = {
name: {
x: 'a'
}
}
let objB = {...objA}
深拷贝
- JSON.parse(JSON.stringify(data))
条件:
- 没有复杂对象:如日期对象,正则对象,没有函数,没有循环引用,没有所有普通对象之外的对象
- 没有undefined
- 递归
动态的key值可以用中括号括起来
var key = 'x'
var value = 'y'
var obj = {}
obj[key] = value
var obj = {
[key + key] : value
}
网友评论