JS 的解构赋值

JavaScript019

JS 的解构赋值,第1张

JS的解构赋值

1,JS的解构赋值是ES6新增的一种赋值方法,一般分为对象解构与数组解构两种形式;

对象解构赋值:

let obj = {

     x: 'Json',

     y: 25,

}

let {x, y} = person

console.log(x,y)// Json 25

var o = {p: 42, q: true}

var {p: foo, q: bar} = o// 将o的p值赋给变量foo,将o的q值赋值给变量bar。

var {p: foo, q: bar} = o等价于({p: foo, q: bar} = o)

数组结构赋值:

let [x, y] = ['a', 'b', 'c'] 

console.log(x,y)// a b

注意点:

1,解构赋值等号两边结构需要一样,所有变量才能正常解析赋值;

2,若左边结构少于右边,左边按结构赋值,右边多余不管;

3,若右边结构少于左边,左边结构将不赋值,为undefined,若左边给默认值将为默认值,如 let {x,y = 3} = {1}x = 1, y = 3 

4,凡是有默认值,若正常赋值,默认值会被覆盖;

4,不能将数组解构赋值给对象的解构赋值;如:const {x, y} = ['a', 'b'];x,y值将为undefined.

** 只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不经过编码直接用于 URL。

***例如:搜索的中文关键字,复制网址之后再粘贴就会发现该URL已经被转码。

1) escape 和 unescape

原理:对除ASCII字母、数字、标点符号 @ * _ + - . / 以外的其他字符进行编码。

编码:

eg:escape('http://www.baidu.com?name=zhang@xiao@jie&order= 你好')

res:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D%u4F60%u597D"

解码:

eg:unescape("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D%u4F60%u597D")

res:" http://www.baidu.com?name=zhang@xiao@jie&order= 你好"

2) encodeURI 和 decodeURI

原理:返回编码为有效的统一资源标识符 (URI) 的字符串,不会被编码的字符:! @ # $ &* ( ) = : / ? + '

encodeURI()是Javascript中真正用来对URL编码的函数。

编码:

eg:encodeURI('http://www.baidu.com?name=zhang@xiao@jie&order= 你好')

  res:" http://www.baidu.com?name=zhang@xiao@jie&order=%E4%BD%A0%E5%A5%BD "

解码:

eg:decodeURI(" http://www.baidu.com?name=zhang@xiao@jie&order=%E4%BD%A0%E5%A5%BD ")

  res:" http://www.baidu.com?name=zhang@xiao@jie&order= 你好"

3) encodeURIComponent 和 decodeURIComponent

原理:对URL的组成部分进行个别编码,而不用于对整个URL进行编码

编码:

eg:encodeURIComponent('http://www.baidu.com?name=zhang@xiao@jie&order=1')

res:"http%3A%2F% 2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1 "

解码:

eg:decodeURIComponent("http%3A%2F% 2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1 ")

res:" http://www.baidu.com?name=zhang@xiao@jie&order=1 "

简单理解:解构赋值的意思是对应的位置,对应的 key 自动赋值。

使用 () 还是 {},要看你定义的函数的参数是什么样的,具体看下面的例子。

第一种:当函数的参数是一个对象时,需要使用 {}。这样在函数里面能通过参数的相同的 key 获取到参数对象里的 key对应的值。

function demo({name, age}) { console.log(`姓名:${name}`) console.log(`年龄:${age}`)

}

demo({ name: '张三', age: 24})

第二种:当函数里的参数是多个时,这个时候用 ()。其实,这个不是结构赋值,真的只是 ES5 里的形参而已,只不过你的代码里用到了 ES6 中的参数默认值设置而已。

function demo(name = "张三", age = 30) { console.log("姓名:" + name) console.log("nianl:" + age)

}

demo()