Javascript小括号“()”的多义性
生活随笔
收集整理的這篇文章主要介紹了
Javascript小括号“()”的多义性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Javascript中小括號有五種語義
語義1,函數聲明時參數表
view source print?| 1 | function func(arg1,arg2){ |
| 2 | ??// ... |
| 3 | } |
語義2,和一些語句聯合使用以達到某些限定作用
view source print?| 01 | // 和for in一起使用 |
| 02 | for(var a in obj){ |
| 03 | ??// ... |
| 04 | } |
| 05 | // 和if一起使用 |
| 06 | if(boo){ |
| 07 | ??//... |
| 08 | } |
| 09 | // 和while一起使用 |
| 10 | while(boo){ |
| 11 | ??// ... |
| 12 | } |
| 13 | // 和do while一起使用 |
| 14 | do{ |
| 15 | ??// ... |
| 16 | }while(boo) |
注意:在與if、while及do while一起使用時小括號會將其中的表達式結果隱式的轉換成布爾值。見無處不在的隱式類型轉換 。
語義3,和new一起使用用來傳值(實參)
view source print?| 1 | // 假設已經定義了類Person,它有兩個字段姓名(name),年齡(age) |
| 2 | var p1 = new Person('Jack',26); |
語義4,作為函數或對象方法的調用運算符(如果定義了參數也可與語義3一樣傳實參)
view source print?| 1 | // 假設已經定義了函數func |
| 2 | func(); |
| 3 | // 假設已經定義了對象obj,且擁有func方法 |
| 4 | obj.func(); |
這里提下typeof運算符,有人喜歡這么使用
typeof(xxx);
請注意typeof后的小括號并非語義4(即不是函數調用),而是后面提到的語義5。我使用typeof一般不加后面的小括號。見 具名函數的多種調用方式
語義5,強制表達式運算
關于語義5,大家最熟悉的莫過于使用eval解析JSON
view source print?| 1 | function strToJson(str){ |
| 2 | ?????// eval 中字符串兩旁加了強制運算符() |
| 3 | ?????var json = eval('(' + str + ')');? |
| 4 | ?????return json; |
| 5 | } |
又如使用較多的是匿名函數自執行
view source print?| 1 | (function(){ |
| 2 | ??// ... |
| 3 | })(); |
注意,以上代碼第1對小括號是語義5,第3對則是語義4。
總結
以上是生活随笔為你收集整理的Javascript小括号“()”的多义性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE9正式版已完成 截图曝光
- 下一篇: nginx php-fpm调优