JavaScript 解構賦值小括號的應用
不少文章將小括號稱作為強制運算子,這是錯誤的。
在JavaScript中並沒有強制運算子這個概念,小括號是分組運算子。
小括號的用法可以參閱JavaScript 小括號()分組運算子一章節。
解構賦值是ES2015新增的功能,可以參閱如下幾篇文章:
(1).陣列結構賦值參閱JavaScript陣列解構賦值一章節。
(2).物件解構賦值參閱JavaScript物件解構賦值一章節。
(3).字串解構賦值參閱JavaScript字串解構賦值一章節。
(4). 函式引數解構賦值參閱JavaScript函式引數解構賦值一章節。
在結構賦值中經常有分組運算子的應用,下面介紹一下容易出現失誤的應用場景。
一.不能使用小括號的情況:
(1).宣告中的變數不能用小括號包裹:
[JavaScript] 純文字檢視 複製程式碼let [(webName)] = ["螞蟻部落"];
程式碼執行效果截圖如下:
報錯原因分析如下:
小括號是運算子,它與運算元webName構成一個表示式。
表示式會返回對運算元運算後的值,然而此時變數webName並未被宣告。
又由於變數在宣告之前不能對其取值,所以最終報錯。
再來看如下幾個常見的錯誤使用:
[JavaScript] 純文字檢視 複製程式碼let {url: (webUrl)} = {url:"softwhy.com"}; function func([(age)]) { return age; };
上述兩行程式碼都會報錯,原因和前面的程式碼是一致的,不再累贅。
(2).模式整體不能使用小括號:
首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼let [webName,url,address] = ["螞蟻部落","www.softwhy.com","青島市南區"]; console.log(webName,url,address);
程式碼執行效果截圖如下:
上面實現了陣列解構賦值操作。
左側部分 [webName,url,address]我們可以稱之為模式,它規定了解構賦值採用何種模式。
此模式不能使用小括號包裹,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼let ([webName,url,address]) = ["螞蟻部落","www.softwhy.com","青島市南區"];
程式碼執行效果截圖如下:
報錯原因分析如下:
因為左側是模式,不是一個表示式或者值等,而運算子會對運算元運算求值,並返回這個值。
怎麼可能使用運算子對一個模式求值呢。
(3).模式不能使用小括號:
[JavaScript] 純文字檢視 複製程式碼let {(url):url} = {url:"http://www.softwhy.com"};
上面的程式碼報錯,因為url不是一個普通變數,而是模式,無法使用操作符對其運算求值。
二.可以應用小括號的情形:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let url; [(url)] = ["http://www.softwhy.com"]; console.log(url);
程式碼執行效果截圖如下:
上面之所以可以用小括號,因為變數url已經宣告,只不過在外部宣告而已。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let url; ({ url:url } = {url:"http://www.softwhy.com"}); console.log(url);
程式碼執行效果截圖如下:
上面是在整個解構賦值外面包裹小括號,否則會報錯。
因為大括號會優先被解讀為語句,而不是解構賦值的語法結構。
三.最後總結:
上面講了這麼多,好像繁雜的樣子,其實關鍵在於對運算子的理解,什麼樣的內容可以作為運算元,比如變數、直接量等可以作為運算元,但是不能將解構賦值的模式作為運算元,也不能對未宣告的變數使用運算子,因為不能對未宣告變數取值。
相關文章
- JavaScript解構賦值的用途JavaScript賦值
- JavaScript 物件解構賦值JavaScript物件賦值
- JavaScript 字串解構賦值JavaScript字串賦值
- JavaScript陣列解構賦值JavaScript陣列賦值
- JavaScript函式引數解構賦值JavaScript函式賦值
- JavaScript 等號 = 賦值運算子JavaScript賦值
- 解構賦值賦值
- JS解構賦值JS賦值
- 變數的解構賦值變數賦值
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- ES6學習-4 解構賦值(1)陣列的解構賦值賦值陣列
- JavaScript匿名函式要外面巢狀小括號原因JavaScript函式巢狀
- es6-解構賦值賦值
- ES6 解構賦值賦值
- ES6解構賦值賦值
- 【題解】括號序列
- ES6中的解構賦值賦值
- javascript 判斷括號是否配對。JavaScript
- [C++]括號使用小技巧C++
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- JavaScript 連等賦值JavaScript賦值
- let-const-解構賦值-字串賦值字串
- ES6之解構賦值賦值
- ES6 解構賦值+改名賦值
- JavaScript取出字串中括號裡的內容JavaScript字串
- eval() JSON轉換 小括號 () 作用JSON
- 有效的括號
- ES6 - 變數的解構賦值解析變數賦值
- ECMAScript 6入門 - 變數的解構賦值變數賦值
- ES6之變數的解構賦值變數賦值
- ES6小技巧 - 使用解構賦值設定函式引數預設值賦值函式
- ES6-解構賦值及原理賦值
- ES6學習解構賦值賦值
- ES6 -- 變數的解構賦值的用途變數賦值
- (譯) javascript中的物件,方括號和演算法JavaScript物件演算法
- 如何解決小括號還有縮排的
- 深入ES6 三 變數的解構賦值變數賦值
- ES6 - let與const,解構賦值賦值