解析Javascript小括弧“()”的多義性_javascript技巧

來源:互聯網
上載者:User

Javascript中小括弧有五種語義

語義1,函式宣告時參數表

複製代碼 代碼如下:

function func(arg1,arg2){
  // ...
}

語義2,和一些語句聯合使用以達到某些限定作用
複製代碼 代碼如下:

// 和for in一起使用
for(var a in obj){
  // ...
}

// 和if一起使用
if(boo){
  //...
}

// 和while一起使用
while(boo){
  // ...
}

// 和do while一起使用
do{
  // ...
}while(boo)

注意:在與if、while及do while一起使用時小括弧會將其中的運算式結果隱式的轉換成布爾值。見 JavaScript中的隱式類型轉換 。

語義3,和new一起使用用來傳值(實參)

複製代碼 代碼如下:

// 假設已經定義了類Person,它有兩個欄位姓名(name),年齡(age)
var p1 = new Person('Jack',26);

語義4,作為函數或對象方法的調用運算子(如果定義了參數也可與語義3一樣傳實參)
複製代碼 代碼如下:

// 假設已經定義了函數func
func();

// 假設已經定義了對象obj,且擁有func方法
obj.func();

這裡提下typeof運算子,有人喜歡這麼使用

typeof(xxx);

請注意typeof後的小括弧並非語義4(即不是函數調用),而是後面提到的語義5。我使用typeof一般不加後面的小括弧。

語義5,強製表達式運算

關於語義5,大家最熟悉的莫過於使用eval解析JSON

複製代碼 代碼如下:

function strToJson(str){
     // eval 中字串兩旁加了強制運算子()
     var json = eval('(' + str + ')'); 
     return json;
}

又如使用較多的是匿名函數自執行
複製代碼 代碼如下:

(function(){
  // ...
})();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.