函数与对象的语法糖

ES6 的语法糖

函数默认参数

1
2
3
4
function sum(a=0, b=0){
return a+b
}
//没有传参,默认为 0

与python不同:
在函数被调用时,参数默认值会被解析,每次函数调用时都会创建一个新的参数对象

1
2
3
4
5
6
7
8
function push(item, array=[]){
array.push(item)
retrun array
}

console.log(push(1)) //[1]
console.log(push(2)) //[2] not[1,2]
//js每次都会有一个新的参数对象
1
2
3
4
5
6
7
def fn(item, array=[]):
array.append(item)
return array

fn(1) #[1]
fn(2) #[1,2]
#python默认参数只初始化一次

剩余参数

1
2
3
4
5
6
7
8
function sum(message, ...numbers){
result = numbers.reduce((p, v)=>p+v, 0)
return message + result
}

sum('结果是',1,2,3,4,5,6,7,8,9,10)
// "结果是55"
// ...numbers 是一个数组,剩余参数,[1,2,3,4,5,6,7,8,9,10]

伪数组变数组

1
2
3
let args = Array.prototype.slice.call(arguments)
let args = Array.from(arguments)
let args = [...arguments]

展开操作

1
2
3
4
5
6
7
8
9
10
let array1 = [1,2,3,4,5,6]

let [,,,...array2] = array1
console.log(array2) // [4,5,6]

let array3 = [0, ...array1, 7]
console.log(array3) // [0,1,2,3,4,5,6,7]

let array4 = [0].concat(array1).concat([7])
console.log(array4) // [0,1,2,3,4,5,6,7]

解构赋值

  1. js方括号会提到上一行,方括号开头的加分号

    交换 a b 的值

    1
    2
    3
    var a = 1
    var b = 2
    ;[a,b] = [b,a]
  2. 1
    [a, b, ...rest] = [10, 20, 30, 40, 50]
  3. 1
    2
    var m = {name: 'Jerry', age: 18, gender: 'Male'}
    var {name, age, gender} = m
    1
    2
    3
    var m = {name: 'Jerry', age: 18, gender: 'Male'}
    var {name: xingming} = m
    console.log(xingming) // Jerry 取得是 name ,但是将name重命名成 xingming
    1
    2
    3
    var m = {name: 'Jerry', age: 18, gender: 'Male', child: {name: 'Tom'}}
    var {child: {name:xixngming='no'}} = m
    console.log(xingming) // Tom
  4. 对象拷贝(浅拷贝)

    1
    2
    let objB = Object.assign({}, objA)
    let objB = {...objA}

    深拷贝

    1
    2
    3
    JSON.parse(JSON.stringfy(data)) 
    //这个方法不适用于复杂对象
    //复杂对象深拷贝要用递归
  5. 对象合并

    1
    2
    let objC = Object.assign({}, objA, objB)
    let objC = {...objA, ...objB}
  6. 对象属性加强

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var x = 1
    var y = 2

    var obj = {
    x: x,
    y: y
    }

    //可以写成
    var obj = {x, y}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var key = 'x'
    var value = 'y'

    var obj = {}
    obj[key] = value

    //可以写成
    var obj = {
    [key]: value //动态的 key 值 用 [] 括起来
    }

    //错误写法
    var obj = {
    key: value //错的,key 变成字符串
    }

    函数属性可以缩写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var obj2 = {
    sayHi: function(){},
    sayBye: function(){}
    }

    //可以写成
    var obj2 = {
    sayHi(){},
    sayBye(){}
    }

函数接字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
var name = 'lk'
var person = '好人'

var fn = function(){
console.log(arguments)
}

fn`${name} 是一个 ${person}`
// [
// 0: ["", " 是一个 ", ""],
// 1: "lk",
// 2: "好人"
// ]