解构 随笔

解构过程 != 变量申明
解构过程中, 等号右边的数据类型 不是iterator(迭代器,可遍历对象)会报错
对象也能解构

function t(x){  return x; }
var [a=t(1)]=[t()]
// a=1

var [a,b,c]=[1,2]
//c =undefined

var [a,,b]=[1,2,3,4,5]
// b=3


var [a,...b]=[1]
// a= 1  b=[]

var [a,...b]=[]
// a=undefined  b=[]

var [t,t,t]=[1,2,3]
// t=3

var [t=3,t=t] =[undefined,null]
// t=null

var [t=3,t,t=t]=[1,2]
// t=2

let [t,t]=[1,2]
//error 

var [a=b,b=4]=[]
// a=undefined b=4

let [a=b,b=4]=[]
//error  let 不存在变量提升

let {t=1}={}
// t=1

let {t:x}={t:1}
//t=1

var {0:t}=[1]
// t=1

var {a:[x]}={a:[1]}
//error    解构时a:[x] 中的a 表示模式
var {a,a:[x]}={a:[1]}
// a=[1] x=1   

var t = {tt:1};
var { a: t.tt} = { a: 123}
// error
var t = {tt:1};
({ a: t.tt} = { a: 123})
// t.tt =123
// ---------------------------------------------没懂

var {t:x[0]}={t:1}
//error  父解构不存在

目标结果得到 x=1

var {t:x}={t:{x:1}}
// x={x:1}
var {t: x :x}={t:{x:1}}
// error
var {t:{x}}={t:{x:1}}
// x=1

解构过程中的属性获取

 var {keys:t}=Object.keys
    // t === Object.keys

解构过程中的类型转换

 var {slice:t}='123'
    //   '123' => String('123') 
    // 注意 这里   t === String.prototype.slice

数组转对象

  var {[1+1]:t}=[1,2,3]
    //t=3
    var {0:t}=[1,2,3]
    //t=1
    var {(1+1):t}=[1,2,3]
    //error 解构中圆括号的使用
    
let t;
{t} = {x: 1};
//如果要将一个已经声明的变量用于解构赋值会报错 ,JavaScript 引擎会将{x}理解成一个代码块
let x;
({x} = {x: 1});
// x=1 success

怪异写法:

  []=[] // success
    {}={}//success
    []={} ([]={})  // error
    {}=[] //error 
    ({}=[]) //success
    []='  ' //success
    '  '=[]    ('  '=[])  //error

使用圆括号正确的情况(来自es6书本):

[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确

使用圆括号错误的情况(来自es6书本):

let [(a)] = [1];
let {x: (c)} = {};
let ({x: c}) = {};
let {(x: c)} = {};
let {(x): c} = {};

let { o: ({ p: p }) } = { o: { p: 2 } };

猜你喜欢

转载自blog.csdn.net/weixin_42801813/article/details/89283389