解构赋值和序列化
扩展运算符
扩展运算符 spread(...
)
将...后面的参数拆分开使用或者赋值,...后面跟数组,接受参数的时候...后面是最后一个参数
javascript
function foo(...arr) {
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
}
}
foo(1, 1, 2, 3, 5, 8) //1 1 2 3 5 8
javascript
let [x, ...y] = [1, 23, 456, 78910]
console.log(x, y) //1 [23, 456, 78910]
赋值
javascript
let [...x] = [1, ...[2, 3], 5, ...[6, 7]] //其中等号左边的x被分解开来接受参数,等号右边的数组被分解开来传值
function foo(x, ...y) {
console.log(x, y)
}
foo(...[1, ...[2, 3], 5, ...[6, 7]])
javascript
let foo = () => {}
let arr = [1, 2]
foo.call(window, ...arr)
foo.apply(window, arr) //与上式等价
合并数组
javascript
let a = [1, 2],
b = [3, 4]
let c = a.concat(b) //[1,2,3,4]
c = [...a, ...b] //[1,2,3,4]
拆分字符串
javascript
console.log([..."666"]) //["6", "6", "6"]
解构赋值
左右结构一定要相同
数组
一般的赋值方法是对单个变量进行赋值,现在可以对多个变量以相同的结构赋值,按顺序赋值
javascript
let [a, b] = [1, 2]
console.log(a, b) //1 2
let [a1, [
[a2], a3
]] = [3, [
[4], 5
]]
此时左右同为数组结构,因为右边为数组,左边赋值的时候需要写出类似的结构,变量 a,b 是当前作用域的变量。
交换两个变量值
javascript
;
[a, b] = [b, a]
使用扩展运算符
javascript
let [a, ...b] = [1, 2, 3, 5, 7]
console.log(a, b) //1 [2,3,5,7]
let [c, ...d] = [11]
console.log(c, d) //11 []
其中 b 是将剩余的参数全部拿到了,所以是一个数组,如果拿不到就是undefined
,数组就是空数组
设置默认值
如果
- 匹配到的值是
undefined
- 有默认值,则是默认值
javascript
let [, b = 1, c = 2] = ["a", "b"]
console.log(b, c) //"b" 2
let [x = 1, y = x] = [2]
console.log(x, y) //2 2
对象
对象解构赋值时赋值对象的属性值,所以匹配的时候需要对象的属性名相同。
javascript
let {
name,
age
} = {
age: 18,
name: "Gin",
}
console.log(name, age) //"Gin" 18
如果是变量名与属性名不一致,则结构上需保证两边的属性名匹配,
javascript
let {
name: myname,
age: myage,
sex: sex = "boy", //默认值
} = {
name: "Gin Tama",
age: 18,
}
console.log(myname, myage)
Array 对象上有很多我们学过的方法。于是。。。
javascript
let {
toString,
valueOf
} = Array
//数组的方法就被我迅速拿到了
- 函数传参解构赋值。
javascript
function add([x = 0, y = 0]) {
return x + y
} //数组前两项的和
add([1, 2, 3, 5, 7]) //3
序列化
JSON
格式对象
JSON
全称 JavaScript 对象格式(JavaScript Object Notation)。是 JS 原生的数据存储格式。书写方式和对象非常类似,并且更加严格。尤其是属性名需要加引号,属性之间以逗号分隔。最后一个属性不加逗号,值可以是数组可以是对象嵌套,获取以及修改的方式。
存储在 JSON 格式的文件中。
json
{
"name": "Gin",
"own": ["apple", "banana", "pen"],
"type": {
"age": 18,
"intrests": ["1", "2", "3"]
}
}
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。
由于这种相似性,无需解析器,JavaScript 程序能够使用内建的eval()
函数,即可用 JSON 数据来生成原生的 JavaScript 对象。
在很多使用不了eval()
函数的情况下,比如vue.js
的插值表达式({{}}
)中无法使用.
javascript
JSON.stringify() //序列化 obj→str
JSON.parse() //反序列化 str→obj