## 1\. 字符串
字符串也可以解構賦值。這是因為此時,字符串被轉換成了一個類似數組的對象。
~~~javascript
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
~~~
類似數組的對象都有一個`length`屬性,因此還可以對這個屬性解構賦值。
~~~javascript
let {length : len} = 'hello';
len // 5
~~~
## 2\. 數值和布爾值
解構賦值時,如果等號右邊是數值和布爾值,則會先轉為對象。
~~~javascript
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
~~~
上面代碼中,數值和布爾值的包裝對象都有`toString`屬性,因此變量`s`都能取到值。
解構賦值的規則是,只要等號右邊的值不是對象或數組,就先將其轉為對象。由于`undefined`和`null`無法轉為對象,所以對它們進行解構賦值,都會報錯。
## 3. 函數參數