<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 語法 **2.1 語法** JavaScript程序是用Unicode字符集編寫的。 **2.1.1 區分大小寫** JavaScript中的一切(變量、函數名和操作符)都區分大小寫。比如變量名test和變量名Test代表的是兩個不同的變量。 **2.1.2 標識符** 標識符是指變量、函數、屬性的名字,或函數的參數。 **標識符格式規則**: - 第一個字符必須是一個字母、下劃線(`_`)或一個美元符號(`$`) - 其他字符可以是字母、下劃線、美元符號或數字。 按照慣例,JavaScript標識符采用`駝峰大小寫格式`,也就是第一個字母小寫,剩下的每個有意義的單詞的首字母大寫。 ``` myName ``` 注意:不能把關鍵字、保留字、true、false和null用作標識符。 **2.1.3 注釋** 單行注釋: ``` // 單行注釋 ``` 多行注釋(`/**/`): ``` /* * 多行注釋,這一行星號非必需 */ ``` 注意:多行注意(`/**/`)不能嵌套。 **2.1.4 嚴格模式** ECMAScript 5 引入了`嚴格模式`(strict mode)的概念。嚴格模式是為JavaScript定義了一種不同的解析與執行模型。 在嚴格模式下,ECMAScript 3中的一些不確定的行為將得到處理,而且對某些不安全的操作也會拋出錯誤。 可以在整個腳本中啟用嚴格模式,也可以在函數內的頂部啟用: ``` "use strict"; function doSomething(){ "use strict"; // 函數體 } ``` 如果在代碼中使用"use strict"開啟了嚴格模式,則下面的情況都會在腳本運行之前拋出SyntaxError異常: - 八進制語法:var n = 023和var s = "\047" - with語句 - 使用delete刪除一個變量名(而不是屬性名):delete myVariable - 使用eval或arguments作為變量名或函數名 - 使用未來保留字(也許會在ECMAScript 6中使用):implements, interface, let, package, private, protected, public, static,和yield作為變量名或函數名 - 在語句塊中使用函數聲明:`if(a<b){ function f(){} }` 其他錯誤 - 對象字面量中使用兩個相同的屬性名:{a: 1, b: 3, a: 7} - 函數形參中使用兩個相同的參數名:function f(a, b, b){} **2.1.5 語句** ECMAScript中的語句以一個分號結尾;如果省略分號,則由解析器確定語句的結尾。 強烈建議在可用可不用分號的地方使用分號,因為加上分號,可以避免很多意想不到的錯誤,而且也可以放心的使用壓縮工具來壓縮JavaScript腳本。 **(1) 可選的行尾分號** JavaScript使用分號(;)將語句分隔開。 注意:JavaScript并不是在所有換行處都填補分號,只有在缺少了分號就無法正確解析代碼的時候,才會填補分號。也可以說,如果當前語句和隨后的非空格字符不能當做一個整體來解析時,JavaScript就在當前語句行結束處填補分號 。比如下面代碼: ``` var a a = 3 console.log(a) ``` JavaScript將其解析為: ``` var a; a=3; console.log(a); ``` JavaScript給第一行換行處添加了分號,因為沒有分號,JavaScript就無法解析代碼var a a。第二個a可以單獨當做一條語句“a;”,但JavaScript并沒有給第二行結尾填補分號,因為它可以和第三行內容一起解析成“a=3”。 上面的代碼解析后是沒有問題的,可是沒有主動添加分號,有些時候會導致意想不到的情形。比如: ``` var y=x+f (a+b).toString() ``` 解析后: ``` var y=x+f(a+b).toString(); ``` 如果當前語句和下一行語句無法合并解析,JavaScript則在第一行后填補分號,這是通用規則,但有兩個例外。 第一個例外是在涉及return、break和continue語句的場景總,如果這三個關鍵字后緊跟換行,JavaScript則會在換行處填補分號。 例如: ``` return true; ``` JavaScript會解析成: ``` return; true; ``` 第二個例外是在涉及“++”和“--”運算符的時候。 ``` x ++ y ``` 將會解析成 “x;++y”,而不是“x++;y” 適當的添加分號,可避免意想不到的錯誤。 **2.2 關鍵字和保留字** ECMA-262描述了一組具有特定用途的**關鍵字**,這些關鍵字可用于控制語句的開始或結束,或者用于執行特定操作等,不能用作標識符。 ``` break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try ``` ECMA-262還描述了一組不能用作標識符的**保留字**: ``` abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public ``` 如果使用關鍵字作標識符,會導致“Identifier Expected”錯誤。 有些時候,我們不得不用到保留字貨關鍵字的,比如CSS樣式中的float,這時就需要這樣: ``` style.cssFloat ``` **2.3 變量** ECMAScript的變量是`松散類型`的,所謂`松散類型`就是可以用來保存任何類型的數據。定義變量時要使用`var`操作符,后跟變量名。 ``` var name; ``` 注意:使用var操作符定義的變量將成為定義該變量的作用域中的局部變量,也就是說,如果在函數中使用var定義一個變量,那么這個變量在函數退出后就會被銷毀。 ``` function test(){ var name = 'tg'; //局部變量 } test(); console.log(name); // 報錯 ``` 如果省略了var操作符,就相當于定義了一個全局變量,在函數外部的任何地方都可以訪問到。 ``` function test(){ name = 'tg'; //局部變量 } test(); console.log(name); // "tg" ``` 不推薦省略var操作符。 還有一種隱式全局變量: ``` function test() { var a = b = 0; } test(); console.log(b); // 0 console.log(a); // ReferenceError: a is not defined ``` 在上面的代碼中,由于從右至左的操作符優先級,所以表達式“b=0”是先執行的,而此時b未經過聲明,所以它會成為全局變量。 注意: - 使用var創建的全局變量不能刪除。 - 不適應var創建的隱含全局變量可以使用delete刪除(因為它并不是真正的變量,而是全局對象window的屬性)。 ``` function test() { var a = b = 0; delete a; delete b; console.log(a); // 0 console.log(b); // ReferenceError: b is not defined } test(); ``` **2.3.1 變量提升** **變量提升**是指所有變量的聲明語句,都會被提升到代碼的頭部。 在函數內也一樣,函數中的所有變量聲明會在函數執行時被“提升”至函數體頂端。 看個例子: ``` console.log(a); // undefined var a = 1; function test(){ console.log(a); // undefined var a = 2; } test(); ``` 結果是不是有點出乎你的意料。 其實JavaScript的執行環境分為**聲明階段**和**執行階段**,因此對于上面的代碼,JavaScript會這樣解釋代碼: ``` var a; console.log(a); // undefined a = 1; function test(){ var a; console.log(a); // undefined a = 2; } test(); ``` **2.3.2 復制變量值** 如果從一個變量向另一個變量復制基本類型的值,會在變量對象上創建一個新值,然后把該值復制到為新變量分配的位置上。 ``` var num1 = 5; var num2 = num1; num2 += 5; console.log(num1); //5 console.log(num2); // 10 ``` 從上面例子的結果,我們知道num1中的5和num2中的5是完全獨立的,num2中的5只是num1中的5的一個副本。 當從一個變量向另一個變量復制引用類型的值時,同樣會將存儲在變量對象中的值復制一份放到為新變量分配的空間中。不同的是,這個值的副本實際上是一個指針,而這個指針指向存儲在堆中的一個對象。復制操作結束后,兩個變量實際上將引用同一個對象。因此,改變其中一個變量,就會影響到另一個變量。 ``` var obj1 = new Object(); var obj2 = obj1; obj2.name = 'tg'; console.log(obj1.name); // "tg" ``` 在上面的例子中,我們將obj1賦給了obj2,兩者就指向了同一個對象,然后給obj2添加了一個屬性name,接著訪問obj1中的name,發現值和obj2中的name是一樣,因為這兩個變量引用的都是同一個對象。 注意:對象和原始值(布爾值、數字、字符串、null和undefined)之間的主要區別在于比較方式。 原始值比較的是值,只要編碼值相同,則認為相同: ``` var a = 1; var b = 1; console.log(a === b); // true ``` 而對象比較的是引用(也可以說是引用地址): ``` var obj1 = {}; var obj2 = {}; console.log(obj1 === obj2); // false console.log(obj1 == obj2); // false console.log(obj1 === obj1); // true ``` **2.4 空格、換行符** JavaScript會忽略程序中標識符之間的空格。在大多數情況下忽略換行符。 我們可以使用空格和換行來提高代碼的可讀性。 除了可以識別普通的空格符(\u0020),JavaScript還可以識別如下表示空格的字符: ``` 水平制表符(\u0009) 垂直制表符(\u000B) 換頁符(\u000C) 不中斷空表(\u00A0) 字節序標記(\uFEFF) ``` JavaScript會將如下字符識別為行結束符: ``` 換行符(\u000A) 回車符(\u000D) 行分隔符(\u2028) 段分隔符(\u2029) ``` 回車符加換行符在一起被解析為一個單行結束符。 **2.5 Unicode轉義序列** JavaScript定義了一種特殊序列,使用6個ASCII字符來代表任意16位Unicode內碼。這些Unicode轉義序列碼均以\u為前綴,其后跟隨4個十六進制(使用數字以及大寫或小寫的字母A~Fa~f表示)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看