js之大括號學習

2022-07-24 18:12:12 字數 1574 閱讀 2411

js中大括號有四種語義作用

語義1,組織復合語句,這是最常見的

js**:

if( condition )else

for()    

語義2,物件直接量宣告

varobj = ;  

整個是個賦值語句,其中的是個表示式,單獨存在也不會出現語法錯誤的。

語義3,宣告函式或函式直接量

js**

functionf1()   

varf2 =function()

f1與f2的區別是前者在語法解釋期,後者在執行期。區別在於:如果呼叫該函式的**在函式定義之後,則沒有區別;如果呼叫該函式的**在函式定義之前,則f1仍然可以呼叫,f2則會報錯,提示f2未定義。

語義4,結構化異常處理的語法符號

js**

trycatch( ex )finally

這裡的大括號與符合語句(語義1)是有區別的,大括號中如果只有一條語句,在if/else/for等中大括號是可以省略的,但try/catch/finally則不能省略。

以下**牛逼,學習了

js**

function(){}() //匿名函式立即執行, 語法分析期報錯

{}.constructor //獲取物件直接量的構造器,語法分析期報錯

令人不解的是為何.constructor這麼寫卻不報錯呢,乙個是想獲取物件直接量的構造器,乙個是獲取陣列直接量的構造器而已。

當然新增個變數接收也不會報錯

var c = {}.constructor;

同樣的情況如

var fn = function(){}(),也不會報錯。

實際上是js的「語句優先」在作怪,即{}被理解成復合語句塊(語義1)而不是物件直接量(語義2)或宣告函式(語義3)的語義。

function(){}(),大括號被理解成復合語句,自然前面的function()宣告函式的語法不完整導致語法分析期出錯。

{}.constructor,大括號被理解成復合語句,大括號後面是點運算子,點運算子前沒有合理的物件自然也報錯。

修復方式眾所周知:加個強制運算子()

(function(){})(),(function(){});//強制其理解為函式(語義3),「函式()」表示執行該函式,即宣告後立即執行了。

({}).constructor //({})強制把大括號理解成物件直接量(語義2),「物件.xx」表示獲取物件的成員,自然後面的點運算子可以正常執行了。

js 中 , 中括號,大括號使用詳解

一 大括號,表示定義乙個物件,大部分情況下要有成對的屬性和值,或是函式。如 var langshen 上面宣告了乙個名為 langshen 的物件,多個屬性或函式用,逗號 隔開,因為是物件的屬性,所以訪問時,應該用.點 來層層訪問 langshen.name langshen.age,當然我們也可以...

JS中的大括號 和中括號 詳解

一 大括號,表示定義乙個物件,大部分情況下要有成對的屬性和值,或是函式。如 var langshen 上面宣告了乙個名為 langshen 的物件,屬性名和值用 冒號 隔開,多個屬性或函式用,逗號 隔開,因為是物件的屬性,所以訪問時,應該用.點 來層層訪問 langshen.name langshe...

bash shell 大括號擴充套件

周海漢 文 2010.6.10 大括號 花括號 擴充套件方式也有意思。zhouhh zhh64 brace ls bkzhouhh zhh64 brace touch file.txt zhouhh zhh64 brace ls bk fileinfo.txt filereadme.txt file...