1. 程式人生 > >ES6 變數結構賦值筆記

ES6 變數結構賦值筆記

變數的解構賦值

其實是挺好理解的,用一條式子可以很容易明白

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

類似於模式匹配的賦值模式,長得一樣的就可以完美賦值

1、陣列解構

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"
let [x, , y] = [1, 2, 3];
x // 1
y // 3

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

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []
ps:這裡可以說一下...X,這個符號是什麼意思呢?還是通過式子可以比較清晰的說明:
## 1、展開運算子
let a = [1,2,3];
let b = [0, ...a, 4]; // [0,1,2,3,4]
## 一樣是展開代表元素的意思
let obj = { a: 1, b: 2 };
let obj2 = { ...obj, c: 3 }; // { a:1, b:2, c:3 }
let obj3 = { ...obj, a: 3 }; // { a:3, b:2 }
## 2、解構的一種,叫做剩餘操作符
let a = [1,2,3];
let [b, ...c] = a;
b; // 1
c; // [2,3]

// 也可以
let a = [1,2,3];
let [b, ...[c,d,e]] = a;
b; // 1
c; // 2
d; // 3
e; // undefined

// 也可以
function test(a, ...rest){
  console.log(a); // 1
  console.log(rest); // [2,3]
}
test(1,2,3)

#### 2、物件解構

下面模式p是一個模式,但這樣寫也是一個物件

let obj = {p: [
'Hello',
{ y: 'World' }
]
};
let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

3、字串的解構賦值

const [a,b,c,d,e]='hello',
a //"h"
b //"e"

let {length:len} ='hello';
len //5陣列物件的length屬性

4、函式引數的解析賦值

    function([x,y]){
        return x+y;
    }

    add([1,2]);//3
5、對函式引數使用預設值
function move({x = 0, y = 0} = {}) {
  return [x, y];
}

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

上面的例子可以看到,傳參為空的話就會使用預設值,下面是Chrome的控制檯下打印出來的結果:

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

下面是一種跟上面不一樣的操作:

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

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

這個函式和上面的不同點在於這個函式只有未傳參(傳參為空)的時候才會是用預設值。

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

這裡,map函式會遍歷所有引數,如果沒有引數傳進來,或者傳進來的引數為undefined的時候,會為該引數傳輸一個處理函式吧(下面是Chrome控制檯輸出)

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

ES6 規則:

只要可能導致解構的歧義,就不得使用圓括號。

(嚴謹模式)

解構模式的應用

1、互動變數的值

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

程式碼相當的少。很舒服

2、從函式返回多個值

//返回一個數組

function example(){
    return [1,2,3];
}

let [a,b,c]=example();

//返回一個物件

function example(){

return{
    foo:1,
    bar:2
}
}

let {foo,bar}=example();

3、函式引數的定義

//引數是一組有次序的值
function  f([x,y,z]){----}
f([1,2,3]);
//引數無次序
function f({x,y,z}){----}
f({z:3,y:2,x:1})//無序呼叫

4、提取JSON資料

 let jsonData = {
  id: 42,
  status: "OK",
  data: [867, 5309]
};

let { id, status, data: number } = jsonData;

console.log(id, status, number);
// 42, "OK", [867, 5309]

5、設定函式的預設值,

例子在上面有(ES6規則上面)

6、便利Map結構

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');

for (let [key, value] of map) {
  console.log(key + " is " + value);
}
// first is hello
// second is world

7、輸入模組的制定方法

其實一直都在用的

 const { SourceMapConsumer, SourceNode } = require("source-map");

上面的是今天檢視阮一峰的ecmaScript6入門的一些筆記吧,挺多新奇的概念和用法,看以後實戰能不能嘗試加上去!起碼在交換和設定預設值,這種用法就相當的整潔。不用寫太多冗餘的程式碼。結

相關推薦

ES6 變數結構筆記

變數的解構賦值 其實是挺好理解的,用一條式子可以很容易明白 let [foo, [[bar], baz]] = [1, [[2], 3]]; let [a, b, c] = [1, 2, 3]; 類似於模式匹配的賦值模式,長得一樣的就可以完美賦值

ES6結構----簡單demo

<script type="text/javascript"> // 解構賦值 {     let [a,b,c] = [1,2,3];     console.log(a,b,c); //1 2 3 } //巢狀

es6學習筆記之環境搭建與結構

全域性安裝Babel-cli 在終端中輸入以下命令,如果你安裝很慢的話,可以使用淘寶映象的cnpm來進行安裝。安裝cnpm的方法,大家自己百度吧。 npm install -g babel-cli 雖然已經安裝了babel-cli,只是這樣還不能成功進行轉換,如果你不相信可以輸入下邊的命令

JavaScript中 ES6變數結構

變數的結構賦值使用者很多 1、交換變數的值 let x = 1; let y = 2; [x,y] = [y,x] 上面的程式碼交換變數x和變數y的值,這樣的寫法不僅簡潔,易讀,語義非常清晰 2、從函式返回多個值 函式只能返回一個值,如果要返回多個值,只能講他們放在陣列或者物件裡返回。瞭解 解構賦值 ,取值

JS ES6的變量的結構

req style fir 語句 多個 cti turn 清晰 rst 變量的結構賦值用戶很多 1、交換變量的值 let x = 1; let y = 2; [x,y] = [y,x] 上面的代碼交換變量x和變量y的值,這樣的寫法不僅簡潔,易讀,語義非常清

ES6 物件解構和陣列結構

1、解構物件     1.1、解構單層物件         1.1.1、解構單層物件——不賦值 let data = { id: 1, name: 'Jack' } let { id, name } = data

C語言中結構變數之間

/********************************************************************** * 版權所有 (C)2015, Zhou Zhaoxiong。 * * 檔名稱:Struct2Struct.c * 檔案標識:無 * 內容摘要:結構體變數之間的賦值

ES6的陣列結構

基本用法 * ES允許按照一定模式,從事狐族和物件中提取值,對變數進行賦值。這被稱之為結構。* 通常,我們賦值一般都會採用以下的這種方式 var a = 3; var b = 'string'; // es6寫法 v

day46homework常量字符串拼接結構擴展運算符for-of循環map函數默認

html javascript css <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01定義常量.html</title>

ES6解構

所有 含義 提取 處理 s函數 事情 數據結構 無法 defined 前面的話   我們經常定義許多對象和數組,然後有組織地從中提取相關的信息片段。在ES6中添加了可以簡化這種任務的新特性:解構。解構是一種打破數據結構,將其拆分為更小部分的過程。本文將詳細介紹ES6解構賦值

es6--解構-用途

set post new fun json val con blog 默認值 // 1:交換變量的值 let a = 1; let b = 2; console.log(a,b); [a,b] = [b,a]; console.log(a,b) // 2:函數返回多個值

js es6 解構

等號 {} 如果 math define col 對象 obj es6 解構賦值:es6允許按照一定的模式,從數組或對象中提取值 let [a,b,c] = [1,2,3]; let {a,b}= {a:1,b:2}; 對象 let {a,b}= {b:1,a:2

es6 解構

必須 內部 有一個 沒有 RR 元素 es6 aaa fin 對象的解構與數組有一個重要的不同。數組的元素是按次序排列的,變量的取值由它的位置決定;而對象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。 對象的解構賦值的內部機制,是先找到同名屬性,然後再賦給對應的變量

利用es6解構快速提取JSON數據;

返回 接收 IT IV ava 交換變量 data names 參數 直接上代碼 { let JSONData = { title:‘abc‘, test:[ { nums:5, name:‘jobs‘ },

ES6 解構的常見用途,很強大

常見 turn url 用途 amp first AS fir value 字符串 var [a,b,c,d,e] = "hello"; console.log(a); // h console.log(b); // e console.log(c);

Sql sever 宣告變數變數

語句: --宣告變數DECLARE @idcard nvarchar (50) , @rowid nvarchar (50) --給變數賦值SELECT @idcard = '{0}', @rowid = '{1}' SELECT COUNT (1) FRO

變數語句

變數 什麼是變數: 變數是關聯一個物件的識別符號 變數可以繫結一個物件,並可以通過變數名使用這個物件 識別符號的命名方法: 以字母或下劃線開頭,後跟字母下劃線或數字 說明: 識別符號區分大小寫 示例: a A a1 bbbb set_age _ _abcd __abcd

八大基本變數時需要注意的一個原則

java中的變數型別: 1.數值型變數: byte    short    int    long(長度排序) 2.字元型別: char(單個字元)   String(字串) 3.浮點型別: float(單精

Makefile初探3-變數運算子

(1) = 最簡單的賦值 用=賦值的變數,在被解析時他的值取決於最後一次賦值時的值,所以你看變數引用的值時不能只往前面看,還要往後面看。 注意:Makefile中並不要求賦值運算子兩邊一定要有空格或者無空格,這一點比shell的格式要求要鬆一些。 1 A=abc 2 B=$(A)

Shell中的多變數動態問題

實際文字處理的時候會碰到多個變數,動態賦值的問題。比如說在遍歷1到100的數字,將其動態賦值給 var_1=1 var_2=2 var_3=3 ...... var_100=100 如果按常規的話,是賦值不成功,這個時候要藉助declare和export來完成 藉助decla