ES 6における変数解構付与の書き込みモード

3166 ワード

ES 6における変数解構付与の書き込みモード
var [a, b, c] = [1, 2, 4];

let [foo, [[baz], bar]] = [1, [[2], 3]];

let [, , third] = [1, 2, 3];

let [x, , y] = [1, 2, 3];

let [head, ...tail] = [1, 2, 3, 4];

//       ,       undefined。
let [x1, y1, ...z] = [1];

let [x2, y2] = [1, 2, 3];
//      
let [m, [k], j] = [1, [2, 3], 4];

let [x3, y3, z3] = new Set(["a", "b", "c"]);
//            
let [fos = true] = [];

//   ,ES6           (===)
var [ xx = 1 ] = [undefined];
// x = 1

//          null,        ,  null     undefined
var [ xxx = 1 ] = [null];
// xxx = null

function fn() {
  console.log("fn");
}
//            ,             ,         ,    。
let [ax = fn()] = [];
console.log(ax);


//                 ,          
let [x4 = 1, y4 = x4] = [];
console.log(y4)

let [x5 = 1, y5 = x5] = [3];
console.log(y5)

let {name, age} = {name: "es6", age: "1"};
console.log(name); // es6

let {sex} = {name: "es6", age: "1"};
console.log(sex); // undefined


let { paused: state} = { paused:"paused", sex:"sex"};
console.log(state);


var obj = {"first": "aaa", "last": "lll"};
let {first:f, last: l} = obj;
console.log(f); // 1

//             ,        ,          。         ,     。
var { foos: foosz, bars: bars } = { foos: "foosz", bars: "bbb" };
console.log(foosz);
//console.log(foos); error: foo is not defined


//let              ,     。             ,        ,       。
let fooc;
({fooc} = {fooc: 1}); //   
console.log(fooc); // 1

var objs = {
  p: [
    'Hello',
    { ya: 'World' }
  ]
};
var { p: [xa, { ya }] } = objs;
console.log(xa);
console.log(ya);


var node = {
  loc: {
    start: {
      line: 1,
      column: 5
    }
  }
};
var { loc: { start: { line }} } = node;
console.log(line); // 1
//loc  // error: loc is undefined
//start // error: start is undefined
//      ,  line   ,loc start    ,     。

let {message:msg = "message"} = {};
console.log(msg);



var {xq = 3} = {xq: undefined};
xq // 3
var {xw = 3} = {xw: null};
xw // null



//      ,      undefined。
var {food} = {bar: 'baz'};
food // undefined


//           。      ,                 。
const [aa, bb, cc, dd, ee] = 'hello';
 console.log(aa);

//            length  ,              。
let {length : len} = 'hello';
len // 5


//     ,             ,       。
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s1} = true;
s1 === Boolean.prototype.toString // true


//        ,            ,        。  undefined null      ,           ,    。
//let { prop: xn } = undefined; // TypeError
//let { prop: yn } = null; // TypeError


function add([x, y]){
  return x + y;
}
add([1, 2]); // 3




function move({x = 0, y = 0} = {}) {
  return [x, y];
}
move({x: 3, y: 8}); // [3, 8]



function move({x, y} = { x: 0, y: 0 }) {
  return [x, y];
}

console.log(move({x: 3, y: 8})); // [3, 8]
//         move        ,      x y     ,                。
//       ,       [0, 0]


// undefined            。
[1, undefined, 3].map((x = 'yes') => x);
// [ 1, 'yes', 3 ]