整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          「JavaScript 教程」入門篇-JavaScr

          「JavaScript 教程」入門篇-JavaScript 的基本語法

          、語句

          JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個語句。

          語句(statement)是為了完成某種任務而進行的操作,比如下面就是一行賦值語句。

          var a=1 + 3;
          

          這條語句先用var命令,聲明了變量a,然后將1 + 3的運算結(jié)果賦值給變量a。

          1 + 3叫做表達式(expression),指一個為了得到返回值的計算式。語句和表達式的區(qū)別在于,前者主要為了進行某種操作,一般情況下不需要返回值;后者則是為了得到返回值,一定會返回一個值。凡是 JavaScript 語言中預期為值的地方,都可以使用表達式。比如,賦值語句的等號右邊,預期是一個值,因此可以放置各種表達式。

          語句以分號結(jié)尾,一個分號就表示一個語句結(jié)束。多個語句可以寫在一行內(nèi)。

          var a=1 + 3 ; var b='abc';
          

          分號前面可以沒有任何內(nèi)容,JavaScript 引擎將其視為空語句。

          ;;;
          

          上面的代碼就表示3個空語句。

          表達式不需要分號結(jié)尾。一旦在表達式后面添加分號,則 JavaScript 引擎就將表達式視為語句,這樣會產(chǎn)生一些沒有任何意義的語句。

          1 + 3;'abc';
          

          上面兩行語句只是單純地產(chǎn)生一個值,并沒有任何實際的意義。

          2、變量

          2.1、概念

          變量是對“值”的具名引用。變量就是為“值”起名,然后引用這個名字,就等同于引用這個值。變量的名字就是變量名。

          var a=1;
          

          上面的代碼先聲明變量a,然后在變量a與數(shù)值1之間建立引用關系,稱為將數(shù)值1“賦值”給變量a。以后,引用變量名a就會得到數(shù)值1。最前面的var,是變量聲明命令。它表示通知解釋引擎,要創(chuàng)建一個變量a。

          注意,JavaScript 的變量名區(qū)分大小寫,A和a是兩個不同的變量。

          變量的聲明和賦值,是分開的兩個步驟,上面的代碼將它們合在了一起,實際的步驟是下面這樣。

          var a;
          a=1;
          

          如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個 JavaScript 關鍵字,表示“無定義”。

          var a;
          a // undefined
          

          如果變量賦值的時候,忘了寫var命令,這條語句也是有效的。

          var a=1;// 基本等同a=1;
          

          但是,不寫var的做法,不利于表達意圖,而且容易不知不覺地創(chuàng)建全局變量,所以建議總是使用var命令聲明變量。

          如果一個變量沒有聲明就直接使用,JavaScript 會報錯,告訴你變量未定義。

          x// ReferenceError: x is not defined
          

          上面代碼直接使用變量x,系統(tǒng)就報錯,告訴你變量x沒有聲明。

          可以在同一條var命令中聲明多個變量。

          var a, b;
          

          JavaScript 是一種動態(tài)類型語言,也就是說,變量的類型沒有限制,變量可以隨時更改類型。

          var a=1;
          a='hello';
          

          上面代碼中,變量a起先被賦值為一個數(shù)值,后來又被重新賦值為一個字符串。第二次賦值的時候,因為變量a已經(jīng)存在,所以不需要使用var命令。

          如果使用var重新聲明一個已經(jīng)存在的變量,是無效的。

          var x=1;var x;
          x // 1
          

          上面代碼中,變量x聲明了兩次,第二次聲明是無效的。

          但是,如果第二次聲明的時候還進行了賦值,則會覆蓋掉前面的值。

          var x=1;var x=2;// 等同于var x=1;var x;
          x=2;
          


          2.2、變量提升

          JavaScript 引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結(jié)果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)。

          console.log(a);var a=1;
          

          上面代碼首先使用console.log方法,在控制臺(console)顯示變量a的值。這時變量a還沒有聲明和賦值,所以這是一種錯誤的做法,但是實際上不會報錯。因為存在變量提升,真正運行的是下面的代碼。

          var a;console.log(a);
          a=1;
          

          最后的結(jié)果是顯示undefined,表示變量a已聲明,但還未賦值。

          3、標識符

          標識符(identifier)指的是用來識別各種值的合法名稱。最常見的標識符就是變量名,以及后面要提到的函數(shù)名。JavaScript 語言的標識符對大小寫敏感,所以a和A是兩個不同的標識符。

          標識符有一套命名規(guī)則,不符合規(guī)則的就是非法標識符。JavaScript 引擎遇到非法標識符,就會報錯。

          簡單說,標識符命名規(guī)則如下。

          • 第一個字符,可以是任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。
          • 第二個字符及后面的字符,除了 Unicode 字母、美元符號和下劃線,還可以用數(shù)字0-9。

          下面這些都是合法的標識符。

          arg0
          _tmp
          $elem
          π
          

          下面這些則是不合法的標識符。

          1a // 第一個字符不能是數(shù)字
          23 // 同上
          *** // 標識符不能包含星號
          a+b // 標識符不能包含加號
          -d // 標識符不能包含減號或連詞線
          

          中文是合法的標識符,可以用作變量名。

          var 臨時變量=1;
          
          JavaScript 有一些保留字,不能用作標識符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

          4、注釋

          源碼中被 JavaScript 引擎忽略的部分就叫做注釋,它的作用是對代碼進行解釋。Javascript 提供兩種注釋的寫法:一種是單行注釋,用//起頭;另一種是多行注釋,放在/*和*/之間。

          // 這是單行注釋/*
           這是
           多行
           注釋
          */
          

          此外,由于歷史上 JavaScript 可以兼容 HTML 代碼的注釋,所以<!--和-->也被視為合法的單行注釋。

          x=1; <!-- x=2;
          --> x=3;
          

          上面代碼中,只有x=1會執(zhí)行,其他的部分都被注釋掉了。

          需要注意的是,-->只有在行首,才會被當成單行注釋,否則會當作正常的運算。

          function countdown(n) { 
          while (n --> 0) console.log(n);
          }
          countdown(3)// 2// 1// 0
          

          上面代碼中,n --> 0實際上會當作n-- > 0,因此輸出2、1、0。

          5、區(qū)塊

          JavaScript 使用大括號,將多個相關的語句組合在一起,稱為“區(qū)塊”(block)。

          對于var命令來說,JavaScript 的區(qū)塊不構成單獨的作用域(scope)。

          { var a=1;
          }
          a // 1
          

          上面代碼在區(qū)塊內(nèi)部,使用var命令聲明并賦值了變量a,然后在區(qū)塊外部,變量a依然有效,區(qū)塊對于var命令不構成單獨的作用域,與不使用區(qū)塊的情況沒有任何區(qū)別。在 JavaScript 語言中,單獨使用區(qū)塊并不常見,區(qū)塊往往用來構成其他更復雜的語法結(jié)構,比如for、if、while、function等。

          6、條件語句

          JavaScript 提供if結(jié)構和switch結(jié)構,完成條件判斷,即只有滿足預設的條件,才會執(zhí)行相應的語句。

          6.1、if 結(jié)構

          if結(jié)構先判斷一個表達式的布爾值,然后根據(jù)布爾值的真?zhèn)危瑘?zhí)行不同的語句。所謂布爾值,指的是 JavaScript 的兩個特殊值,true表示真,false表示偽。

          if (布爾值)
           語句;
          // 或者if (布爾值) 語句;
          

          上面是if結(jié)構的基本形式。需要注意的是,“布爾值”往往由一個條件表達式產(chǎn)生的,必須放在圓括號中,表示對表達式求值。如果表達式的求值結(jié)果為true,就執(zhí)行緊跟在后面的語句;如果結(jié)果為false,則跳過緊跟在后面的語句。

          if (m===3)
           m=m + 1;
          

          上面代碼表示,只有在m等于3時,才會將其值加上1。

          這種寫法要求條件表達式后面只能有一個語句。如果想執(zhí)行多個語句,必須在if的條件判斷之后,加上大括號,表示代碼塊(多個語句合并成一個語句)。

          if (m===3) {
           m +=1;
          }
          

          建議總是在if語句中使用大括號,因為這樣方便插入語句。

          注意,if后面的表達式之中,不要混淆賦值表達式(=)、嚴格相等運算符(===)和相等運算符(==)。尤其是賦值表達式不具有比較作用。

          var x=1;var y=2;
          if (x=y) { console.log(x);
          }// "2"
          

          上面代碼的原意是,當x等于y的時候,才執(zhí)行相關語句。但是,不小心將嚴格相等運算符寫成賦值表達式,結(jié)果變成了將y賦值給變量x,再判斷變量x的值(等于2)的布爾值(結(jié)果為true)。

          這種錯誤可以正常生成一個布爾值,因而不會報錯。為了避免這種情況,有些開發(fā)者習慣將常量寫在運算符的左邊,這樣的話,一旦不小心將相等運算符寫成賦值運算符,就會報錯,因為常量不能被賦值。

          if (x=2) {
           // 不報錯
          if (2=x) { 
           // 報錯
          

          至于為什么優(yōu)先采用“嚴格相等運算符”(===),而不是“相等運算符”(==),請參考《運算符》章節(jié)。

          6.2、if...else 結(jié)構

          if代碼塊后面,還可以跟一個else代碼塊,表示不滿足條件時,所要執(zhí)行的代碼。

          if (m===3) { 
          // 滿足條件時,執(zhí)行的語句
          }
           else { 
           // 不滿足條件時,執(zhí)行的語句
          }
          

          上面代碼判斷變量m是否等于3,如果等于就執(zhí)行if代碼塊,否則執(zhí)行else代碼塊。

          對同一個變量進行多次判斷時,多個if...else語句可以連寫在一起。

          if (m===0) { 
          // ...} 
          else if (m===1) { 
           // ...} 
           else if (m===2) { 
           // ...} 
           else { // ...}
          

          else代碼塊總是與離自己最近的那個if語句配對。

          var m=1;
          var n=2;
          if (m !==1)
          if (n===2) 
          console.log('hello');
          else console.log('world');
          

          上面代碼不會有任何輸出,else代碼塊不會得到執(zhí)行,因為它跟著的是最近的那個if語句,相當于下面這樣。

          if (m !==1) { 
          if (n===2) 
          { console.log('hello');	
           }
           else { console.log('world');
           }
          }
          

          如果想讓else代碼塊跟隨最上面的那個if語句,就要改變大括號的位置。

          if (m !==1) { 
          if (n===2) { 
          console.log('hello');	
           }
          } 
          else { console.log('world');
          }// world
          


          6.3、switch 結(jié)構

          多個if...else連在一起使用的時候,可以轉(zhuǎn)為使用更方便的switch結(jié)構。

          switch (fruit) { 
          case "banana": // ...
           break; 
          case "apple": // ...
           break; 
          default: // ...}
          

          上面代碼根據(jù)變量fruit的值,選擇執(zhí)行相應的case。如果所有case都不符合,則執(zhí)行最后的default部分。需要注意的是,每個case代碼塊內(nèi)部的break語句不能少,否則會接下去執(zhí)行下一個case代碼塊,而不是跳出switch結(jié)構。

          var x=1;
          switch (x) { 
          case 1: 
          console.log('x 等于1'); 
          case 2: 
          console.log('x 等于2'); 
          default: console.log('x 等于其他值');
          }// x等于1// x等于2// x等于其他值
          

          上面代碼中,case代碼塊之中沒有break語句,導致不會跳出switch結(jié)構,而會一直執(zhí)行下去。正確的寫法是像下面這樣。

          switch (x) { 
          case 1: console.log('x 等于1'); 
           break; 
           case 2: console.log('x 等于2'); 
           break; 
           default: console.log('x 等于其他值');
          }
          

          switch語句部分和case語句部分,都可以使用表達式。

          switch (1 + 3) { case 2 + 2:
           f(); break; default:
           neverHappens();
          }
          

          上面代碼的default部分,是永遠不會執(zhí)行到的。

          需要注意的是,switch語句后面的表達式,與case語句后面的表示式比較運行結(jié)果時,采用的是嚴格相等運算符(===),而不是相等運算符(==),這意味著比較時不會發(fā)生類型轉(zhuǎn)換。

          var x=1;
          switch (x) { 
          case true: console.log('x 發(fā)生類型轉(zhuǎn)換'); 
          break; 
          default: console.log('x 沒有發(fā)生類型轉(zhuǎn)換');
          }// x 沒有發(fā)生類型轉(zhuǎn)換
          

          上面代碼中,由于變量x沒有發(fā)生類型轉(zhuǎn)換,所以不會執(zhí)行case true的情況。這表明,switch語句內(nèi)部采用的是“嚴格相等運算符”,詳細解釋請參考《運算符》一節(jié)。

          6.4、三元運算符 ?:

          JavaScript 還有一個三元運算符(即該運算符需要三個運算子)?:,也可以用于邏輯判斷。

          (條件) ? 表達式1 : 表達式2
          

          上面代碼中,如果“條件”為true,則返回“表達式1”的值,否則返回“表達式2”的值。

          var even=(n % 2===0) ? true : false;
          

          上面代碼中,如果n可以被2整除,則even等于true,否則等于false。它等同于下面的形式。

          var even;if (n % 2===0) {
           even=true;
          } else {
           even=false;
          }
          

          這個三元運算符可以被視為if...else...的簡寫形式,因此可以用于多種場合。

          var myVar;console.log(
           myVar ? 'myVar has a value' : 'myVar does not have a value')
          // myVar does not have a value
          

          上面代碼利用三元運算符,輸出相應的提示。

          var msg='數(shù)字' + n + '是' + (n % 2===0 ? '偶數(shù)' : '奇數(shù)');
          

          上面代碼利用三元運算符,在字符串之中插入不同的值。

          7、循環(huán)語句

          循環(huán)語句用于重復執(zhí)行某個操作,它有多種形式。

          7.1、while 循環(huán)

          While語句包括一個循環(huán)條件和一段代碼塊,只要條件為真,就不斷循環(huán)執(zhí)行代碼塊。

          while (條件)
           語句;// 或者while (條件) 語句;
          

          while語句的循環(huán)條件是一個表達式,必須放在圓括號中。代碼塊部分,如果只有一條語句,可以省略大括號,否則就必須加上大括號。

          while (條件) {
           語句;
          }
          

          下面是while語句的一個例子。

          var i=0;while (i < 100) { console.log('i 當前為:' + i);
           i=i + 1;
          }
          

          上面的代碼將循環(huán)100次,直到i等于100為止。

          下面的例子是一個無限循環(huán),因為循環(huán)條件總是為真。

          while (true) { console.log('Hello, world');
          }
          


          7.2、for 循環(huán)

          for語句是循環(huán)命令的另一種形式,可以指定循環(huán)的起點、終點和終止條件。它的格式如下。

          for (初始化表達式; 條件; 遞增表達式)
           語句// 或者for (初始化表達式; 條件; 遞增表達式) {
           語句
          }
          

          for語句后面的括號里面,有三個表達式。

          • 初始化表達式(initialize):確定循環(huán)變量的初始值,只在循環(huán)開始時執(zhí)行一次。
          • 條件表達式(test):每輪循環(huán)開始時,都要執(zhí)行這個條件表達式,只有值為真,才繼續(xù)進行循環(huán)。
          • 遞增表達式(increment):每輪循環(huán)的最后一個操作,通常用來遞增循環(huán)變量。

          下面是一個例子。

          var x=3;for (var i=0; i < x; i++) { console.log(i);
          }// 0// 1// 2
          

          上面代碼中,初始化表達式是var i=0,即初始化一個變量i;測試表達式是i < x,即只要i小于x,就會執(zhí)行循環(huán);遞增表達式是i++,即每次循環(huán)結(jié)束后,i增大1。

          所有for循環(huán),都可以改寫成while循環(huán)。上面的例子改為while循環(huán),代碼如下。

          var x=3;var i=0;while (i < x) { console.log(i);
           i++;
          }
          

          for語句的三個部分(initialize、test、increment),可以省略任何一個,也可以全部省略。

          for ( ; ; ){ console.log('Hello World');
          }
          

          上面代碼省略了for語句表達式的三個部分,結(jié)果就導致了一個無限循環(huán)。

          7.3、do...while 循環(huán)

          do...while循環(huán)與while循環(huán)類似,唯一的區(qū)別就是先運行一次循環(huán)體,然后判斷循環(huán)條件。

          do
           語句while (條件);// 或者do {
           語句
          } while (條件);
          

          不管條件是否為真,do...while循環(huán)至少運行一次,這是這種結(jié)構最大的特點。另外,while語句后面的分號注意不要省略。

          下面是一個例子。

          var x=3;var i=0;do { console.log(i);
           i++;
          } while(i < x);
          


          7.4、break 語句和 continue 語句

          break語句和continue語句都具有跳轉(zhuǎn)作用,可以讓代碼不按既有的順序執(zhí)行。

          break語句用于跳出代碼塊或循環(huán)。

          var i=0;while(i < 100) { console.log('i 當前為:' + i);
           i++; if (i===10) break;
          }
          

          上面代碼只會執(zhí)行10次循環(huán),一旦i等于10,就會跳出循環(huán)。

          for循環(huán)也可以使用break語句跳出循環(huán)。

          for (var i=0; i < 5; i++) { console.log(i); if (i===3) break;
          }// 0// 1// 2// 3
          

          上面代碼執(zhí)行到i等于3,就會跳出循環(huán)。

          continue語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構的頭部,開始下一輪循環(huán)。

          var i=0;while (i < 100){
           i++; if (i % 2===0) continue; console.log('i 當前為:' + i);
          }
          

          上面代碼只有在i為奇數(shù)時,才會輸出i的值。如果i為偶數(shù),則直接進入下一輪循環(huán)。

          如果存在多重循環(huán),不帶參數(shù)的break語句和continue語句都只針對最內(nèi)層循環(huán)。

          7.5、標簽(label)

          JavaScript 語言允許,語句的前面有標簽(label),相當于定位符,用于跳轉(zhuǎn)到程序的任意位置,標簽的格式如下。

          label:
           語句
          

          標簽可以是任意的標識符,但不能是保留字,語句部分可以是任意語句。

          標簽通常與break語句和continue語句配合使用,跳出特定的循環(huán)。

          top: for (var i=0; i < 3; i++){ 
           for (var j=0; j < 3; j++){ 
           if (i===1 && j===1) break top; 
           console.log('i=' + i + ', j=' + j);
           }
           }// i=0, j=0// i=0, j=1// i=0, j=2// i=1, j=0
          

          上面代碼為一個雙重循環(huán)區(qū)塊,break命令后面加上了top標簽(注意,top不用加引號),滿足條件時,直接跳出雙層循環(huán)。如果break語句后面不使用標簽,則只能跳出內(nèi)層循環(huán),進入下一次的外層循環(huán)。

          標簽也可以用于跳出代碼塊。

          foo: { console.log(1); 
          break 
          foo; console.log('本行不會輸出');
          }console.log(2);// 1// 2
          

          上面代碼執(zhí)行到break foo,就會跳出區(qū)塊。

          continue語句也可以與標簽配合使用。

          top: 
          for (var i=0; i < 3; i++){ 
          for (var j=0; j < 3; j++){ 
           if (i===1 && j===1) continue top; 
          console.log('i=' + i + ', j=' + j);
           }
           }
          // i=0, j=0
          // i=0, j=1
          // i=0, j=2
          // i=1, j=0
          // i=2, j=0
          // i=2, j=1
          // i=2, j=2
          

          上面代碼中,continue命令后面有一個標簽名,滿足條件時,會跳過當前循環(huán),直接進入下一輪外層循環(huán)。如果continue語句后面不使用標簽,則只能進入下一輪的內(nèi)層循環(huán)。

          推薦閱讀:

          「JavaScript 教程」入門篇-導論

          「JavaScript 教程」數(shù)據(jù)類型-數(shù)組

          「JavaScript 教程」數(shù)據(jù)類型-對象

          詳解 js 閉包(圖文版)

          js 中原型和原型鏈深入理解

          讀本文約需要10分鐘,您可以先關注我們,避免下次無法找到。

          本篇文章成哥繼續(xù)帶大家來學習前端教程之VUE,它是一個前端框架具有高效、簡單及易用等特點。下面我們就一起來學習內(nèi)容吧!

          01 VUE簡介

          Vue (讀音 /vju?/,類似于 view) 是一套用于構建用戶界面的漸進式框架。

          與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。

          Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。

          另一方面,當與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時,Vue 也完全能夠為復雜的單頁應用提供驅(qū)動。

          該框架的作者是一位中國人叫尤雨溪,畢業(yè)于上海復旦附中,在美國完成大學學業(yè),本科畢業(yè)于上 Colgate University,后在 Parsons 設計學院獲得 Design & Technology 藝術碩士學位,任職于紐約 Google Creative Lab。

          目前作者以技術顧問的身份加入了阿里巴巴的 Weex 團隊來做 Vue 和 Weex 的 JavaScript runtime 整合,目標是讓大家能用 Vue 的語法跨三端。

          02 VUE安裝

          VUE可以像我們之前jQuery教程一樣將VUE.js下載下來進行引用,也可以通過CDN方式引用,還可以通過VUE-CLI來安裝(VUE-CLI需要通過NPM安裝,在后面的教程中成哥將專門推出一篇NPM入門教程,在這邊就不詳細講解了),在這邊我們登陸到VUE官網(wǎng)來下載VUE.js然后進行引用,具體操作如下:

          1.登陸VUE官網(wǎng)下載vue.js文件

          2.在HTML文件中引用vue.js文件

          1. <!DOCTYPE html>  
          2. <html>  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>VUE基礎教程</title>  
          6.     <!-- 引用vue.js文件   -->  
          7.     <script src="vue.js"></script>  
          8. </head>  
          9. <body>  
          10.   
          11. </body>  
          12. </html>  

          03 VUE使用

          (1)VUE實例

          每個 Vue 應用都是通過用 Vue 函數(shù)創(chuàng)建一個新的 Vue 實例開始的

          1. var vm = new Vue({  
          2.   // 選項  
          3. })  

          當創(chuàng)建一個 Vue 實例時,你可以傳入一個選項對象,下面我們就來看看怎么通過實例將選項對象渲染在頁面的

          1. <!DOCTYPE html>  
          2. <html>  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>VUE基礎教程</title>  
          6.     <!-- 引用vue.js文件   -->  
          7.     <script src="vue.js"></script>  
          8. </head>  
          9. <body>  
          10.     <!-- 這邊的{{msg}}中的msg就是變量,vue會根據(jù)變量名到data數(shù)據(jù)對象中找到其對應的值然后渲染 -->  
          11.     <div id="app">{{msg}}</div>  
          12.     <script>  
          13.       var vm = new Vue({  
          14.           el: '#app',  // dom的掛載點,這邊將dom掛載到id為app的標簽上  
          15.           data: {  // 數(shù)據(jù)對象  
          16.             msg: "hello vue"  // 定義變量值  
          17.           }  
          18.       })  
          19.     </script>  
          20. </body>  
          21. </html>  

          上述代碼渲染結(jié)果如下

          每個 Vue 實例在被創(chuàng)建時都要經(jīng)過一系列的初始化過程——例如,需要設置數(shù)據(jù)監(jiān)聽、編譯模板、將實例掛載到 DOM 并在數(shù)據(jù)變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數(shù),這給了用戶在不同階段添加自己的代碼的機會。比如 created 鉤子可以用來在一個實例被創(chuàng)建之后執(zhí)行代碼

          1. new Vue({  
          2.   data: {  
          3.     a: 1  
          4.   },  
          5.   created: function () {  
          6.     // `this` 指向 vm 實例  
          7.     console.log('a is: ' + this.a)  
          8.   }  
          9. })  
          10. // 在實例創(chuàng)建后會輸出"a is: 1"  

          也有一些其它的鉤子,在實例生命周期的不同階段被調(diào)用,如 mounted、updated 和 destroyed。生命周期鉤子的 this 上下文指向調(diào)用它的 Vue 實例。VUE實例的整個生命周期如下圖所示

          (2)模板語法

          Vue.js 使用了基于 HTML 的模板語法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實例的數(shù)據(jù)。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循規(guī)范的瀏覽器和 HTML 解析器解析。在底層的實現(xiàn)上,Vue 將模板編譯成虛擬 DOM 渲染函數(shù)。結(jié)合響應系統(tǒng),Vue 能夠智能地計算出最少需要重新渲染多少組件,并把 DOM 操作次數(shù)減到最少。

          1)插值

          a.文本

          數(shù)據(jù)綁定最常見的形式就是使用"Mustache"語法 (雙大括號) 的文本插值:

          1. <span>Message: {{ msg }}</span>  

          Mustache 標簽將會被替代為對應數(shù)據(jù)對象上 msg對應的值。無論何時,綁定的數(shù)據(jù)對象上 msg值發(fā)生了改變,插值處的內(nèi)容都會更新。通過使用 v-once 指令,也能執(zhí)行一次性地插值,當數(shù)據(jù)改變時,插值處的內(nèi)容不會更新。但請留心這會影響到該節(jié)點上的其它數(shù)據(jù)綁定

          1. <span v-once>這個將不會改變: {{ msg }}</span>  

          b.原始HTML

          雙大括號會將數(shù)據(jù)解釋為普通文本,而非 HTML 代碼。為了輸出真正的 HTML,你需要使用 v-html 指令,示例如下

          1. <!DOCTYPE html>  
          2. <html>  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>VUE基礎教程</title>  
          6.     <!-- 引用vue.js文件   -->  
          7.     <script src="vue.js"></script>  
          8. </head>  
          9. <body>  
          10.     <div id="app">  
          11.       <!-- 這邊沒有用v-html所以標簽渲染出來直接是文本 -->  
          12.       <p>{{msg}}</p>  
          13.       <!-- 這邊使用了v-html所以渲染初始是標簽 -->  
          14.       <p v-html="msg"></p>  
          15.     </div>  
          16.     <script>  
          17.       var vm = new Vue({  
          18.           el: '#app',  // dom的掛載點,這邊將dom掛載到id為app的標簽上  
          19.           data: {  // 數(shù)據(jù)對象  
          20.             msg: "<h4>我是h4標簽</h4>"  // 定義變量值  
          21.           }  
          22.       })  
          23.     </script>  
          24. </body>  
          25. </html>  

          c.屬性

          雙大括號語法不能作用在 HTML標簽屬性上,需要對標簽屬性操作,應該使用 v-bind 指令

          1. <div v-bind:id="dynamicId"></div>  

          現(xiàn)在通過v-bind來演示HTML標簽屬性的設置

          1. <!DOCTYPE html>  
          2. <html>  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>VUE基礎教程</title>  
          6.     <!-- 引用vue.js文件   -->  
          7.     <script src="vue.js"></script>  
          8. </head>  
          9. <body>  
          10.     <div id="app">  
          11.       <!-- 這邊將button的disabled屬性值綁定到isButtonDisabled變量,如果為true那按鈕將變灰禁止點擊 -->  
          12.       <button v-bind:disabled="isButtonDisabled">點我</button>  
          13.     </div>  
          14.     <script>  
          15.       var vm = new Vue({  
          16.           el: '#app',  // dom的掛載點,這邊將dom掛載到id為app的標簽上  
          17.           data: {  // 數(shù)據(jù)對象  
          18.             isButtonDisabled: true  
          19.           }  
          20.       })  
          21.     </script>  
          22. </body>  
          23. </html>  

          d. javascript 表達式

          上面,我們只進行了綁定簡單的屬性鍵值。但實際上,對于所有的數(shù)據(jù)綁定,Vue.js 都提供了完全的 JavaScript 表達式支持

          1. {{ number + 1 }}  
          2.   
          3. {{ ok ? 'YES' : 'NO' }}  
          4.   
          5. {{ message.split('').reverse().join('') }}  
          6.   
          7. <div v-bind:id="'list-' + id"></div>  

          這些表達式會在所屬 Vue 實例的數(shù)據(jù)作用域下作為 JavaScript 被解析。有個限制就是,每個綁定都只能包含單個表達式,所以下面的例子都不會生效。

          1. <!-- 這是語句,不是表達式 -->  
          2. {{ var a = 1 }}  
          3.   
          4. <!-- 流控制也不會生效,請使用三元表達式 -->  
          5. {{ if (ok) { return message } }}  

          2)指令

          指令 (Directives) 是帶有v-前綴的特殊特性,指令的職責是,當表達式的值改變時,將其產(chǎn)生的連帶影響,響應式地作用于 DOM。

          a.參數(shù)

          一些指令能夠接收一個"參數(shù)",在指令名稱之后以冒號表示,下面我們通過v-on指令來演示動態(tài)改變DOM中渲染的值

          1. <!DOCTYPE html>  
          2. <html>  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>VUE基礎教程</title>  
          6.     <!-- 引用vue.js文件   -->  
          7.     <script src="vue.js"></script>  
          8. </head>  
          9. <body>  
          10.     <div id="app">  
          11.       <p>{{msg}}</p>  
          12.       <button v-on:click="changeContent">點我改變上面頁面內(nèi)容</button>  
          13.     </div>  
          14.     <script>  
          15.       var vm = new Vue({  
          16.           el: '#app',  // dom的掛載點,這邊將dom掛載到id為app的標簽上  
          17.           data: {  // 數(shù)據(jù)對象  
          18.             msg: "我還沒變"  
          19.           },  
          20.          methods: {  
          21.            // v-on是綁定的方法所以在這邊要創(chuàng)建一個click的方法事件changeContent  
          22.            changeContent(){  
          23.              // 當被點擊后對msg進行重新賦值  
          24.              this.msg = "我被改變了"  
          25.            }  
          26.          }  
          27.       })  
          28.     </script>  
          29. </body>  
          30. </html>  

          b.

          么是JavaScript?

          JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級,解釋型或即時編譯型的編程語言。

          函數(shù)優(yōu)先:編程語言中的函數(shù)可以被當作參數(shù)傳遞給其他函數(shù),可以作為另一個函數(shù)的返回值,還可以被賦值給一個變量。

          解釋型:對標編譯型語言,編譯型需預先將源碼編成中間碼,再由解釋器解釋運行。解釋型不需要預先編譯,在程序在運行時才由解釋器翻譯運行。

          JavaScript 的標準是ECMAScript截至 2012 年,所有的現(xiàn)代瀏覽器都完整的支持 ECMAScript 5.1,舊版本的瀏覽器至少支持 ECMAScript 3 標準。

          我們所熟知的ES6是在2015年6月17日,由ECMA國際組織發(fā)布的ECMAScript 的第六版,該版本正式名稱為 ECMAScript 2015。

          https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Language_Resources

          使用場景

          互聯(lián)網(wǎng)的興起,JavaScript的使用范圍已經(jīng)超出了瀏覽器。

          1. 瀏覽器平臺。HTML5的出現(xiàn),瀏覽器本身的功能越來越強,JavaScript 因此得以調(diào)用許多系統(tǒng)功能,如操作本地文件、操作圖片、調(diào)用攝像頭和麥克風,可以開發(fā)更多富客戶端產(chǎn)品。
          2. 服務端應用。node的出現(xiàn)使得 JavaScript 可以用于開發(fā)服務器端應用,也使得JavaScript成為一門可以同時開發(fā)前后端的語言。
          3. 移動應用。js也正在成為手機應用的開發(fā)語言,比如:React Native 項目則是將 JavaScript 寫的組件,編譯成原生組件。
          4. 桌面應用。JavaScript甚至可以開發(fā)桌面應用,比如electronjs。
          5. 數(shù)據(jù)庫操作。在一些Nosql數(shù)據(jù)都是支持JavaScript作為操作語言,像mongodb。

          基本語法

          變量是對值的引用,JavaScript 的變量名區(qū)分大小寫,Aa是兩個不同的變量。

          var total; // 未賦值的變量是 undefined,它是個特殊的值,表示無定義。
          total=1;
          var a,b; // 一個var后可以聲明多個變量。

          變量提升

          你可能很奇怪,執(zhí)行下面代碼沒有報錯。由于JavaScript引擎工作方式是先解析代碼,獲取所有被聲明的變量,換句話說就是所有的變量的聲明語句,都被提升到代碼的頭部。

          console.log(a);
          var a=1;

          變量規(guī)則

          • 第一個字符任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_
          • 第二個字符及后面的字符,除了 Unicode 字母、美元符號和下劃線,還可以用數(shù)字0-9

          另外中文也可以聲明變量,下面保留字除外

          arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

          語句

          JavaScript程序的執(zhí)行單位行,一般情況一行就是一條語句,如果一行要寫多個語句我們使用;表示語句結(jié)束。

          var total=1 + 1; // 聲明了一個變量total,然后將1+1的運算結(jié)果賦值給它。

          注釋

          // 這是單行注釋
          
          /*
           這是
           多行
           注釋
          */

          區(qū)塊

          JavaScript使用大括號將多條語句包裹起來表示一個區(qū)塊,注意var聲明的變量不構成單獨的作用域,這里區(qū)別于java。

          {
            var a=1;
          }
          a // 1

          條件語句

          // if結(jié)構
          if (m===1){ // 往往由一個條件表達式產(chǎn)生的
              console.log('ok')
          }
          // 或者
          if (bool) console.log('ok');
          
          // if/else結(jié)構
          if (m===1){
            語句;
          }else{
              語句;  
          } 
          
          // if/else if.../else 結(jié)構 m==1 m==2 其它
          if (m===1) {
          } else if(m===2){
          }else {
          }

          switch 結(jié)構

          switch (m) {
            case 1:
              // ...
              break;
            case 2:
              // ...
              break;
            default:
              // ...
          }

          注意區(qū)別 ==與===

          使用==比較兩個變量時,會發(fā)生隱式類型轉(zhuǎn)換,例如,自動將字符串類型轉(zhuǎn)換為數(shù)字類型。

          為了避免隱式轉(zhuǎn)換帶來的問題,我們都是用===進行嚴格進行比較。

          三元運算符

          三元運算符也可以用于邏輯判斷。

          (條件) ? 表達式1 : 表達式2

          循環(huán)語句

          var i=0;
          while (i < 100) {
            console.log('i 當前為:' + i);
            i=i + 1;
          }
          // 區(qū)別上面,它至少會執(zhí)行一次
          var i=0;
          do {
            console.log('i 當前為:' + i);
          } while (i < 100);

          for循環(huán)語句

          • 初始化表達式:確定循環(huán)變量的初始值,只在循環(huán)開始時執(zhí)行一次。
          • 條件表達式:每輪循環(huán)開始時,都要執(zhí)行這個條件表達式,只有值為真,才繼續(xù)進行循環(huán)。
          • 遞增表達式:每輪循環(huán)的最后一個操作,通常用來遞增循環(huán)變量。
          for (初始化表達式; 條件; 遞增表達式) {
            語句
          }

          break 和 continue

          break語句用于跳出代碼塊或循環(huán),continue是結(jié)束當前循環(huán),跳到下一次。

          數(shù)據(jù)類型

          null和undefined

          ● 變量沒有初始化:undefined。

          ● 變量不可用:null。

          數(shù)值

          整數(shù)和浮點數(shù),JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點數(shù)形式儲存,即使整數(shù)也是如此。

          1===1.0 // true

          數(shù)值精度:根據(jù)國際標準 IEEE 754,JavaScript 浮點數(shù)的64個二進制位,從最左邊開始,是這樣組成的。

          • 第1位:符號位,0表示正數(shù),1表示負數(shù)
          • 第2位到第12位(共11位):指數(shù)部分
          • 第13位到第64位(共52位):小數(shù)部分(即有效數(shù)字)

          數(shù)值范圍:64位浮點數(shù)的指數(shù)部分的長度是11個二進制位,意味著指數(shù)部分的最大值是2047(2的11次方減1)超出的范圍不能表示。

          數(shù)值進制:

          • 十進制:沒有前導0的數(shù)值。
          • 八進制:有前綴0o0O的數(shù)值,或者有前導0、且只用到0-7的八個阿拉伯數(shù)字的數(shù)值。
          • 十六進制:有前綴0x0X的數(shù)值。
          • 二進制:有前綴0b0B的數(shù)值。

          NaN

          NaN是 JavaScript 的特殊值,表示“非數(shù)字”(Not a Number),主要出現(xiàn)在將字符串解析成數(shù)字出錯的場合。

          字符串

          由單雙引號包裹在一起的字符,就是字符串。

          單引號字符串的內(nèi)部,可以使用雙引號。雙引號字符串的內(nèi)部,可以使用單引號。

          'abc' "abc" "'a'" // 字符串
          
          // 字符串換行
          var str='String \
          String \
          String';

          轉(zhuǎn)義符:

          • >\0< :null(\u0000
          • \b :后退鍵(\u0008
          • \f :換頁符(\u000C
          • \n :換行符(\u000A
          • \r :回車鍵(\u000D
          • \t :制表符(\u0009
          • \v :垂直制表符(\u000B
          • \' :單引號(\u0027
          • \" :雙引號(\u0022
          • \ :反斜杠(\u005C

          字符集:javaScript 使用 Unicode 字符集。JavaScript 引擎內(nèi)部,所有字符都用 Unicode 表示。

          對象

          var obj={ // 對象聲明
            a: '1',
            b: '2'
          };
          
          // 對象屬性讀取
          obj.a 
          obj['a']
          
          // 刪除對象屬性
          delete obj.a
          
          // 判斷屬性是否存在
          'a' in obj 
          
          //對象遍歷
          for (var i in obj) {
            console.log('鍵名:', i);
            console.log('鍵值:', obj[i]);
          }

          函數(shù)

          function 關鍵字聲明。

          function foo(s) {
            console.log(s);
          }
          // 表達式形式
          var foo=function(s) {
            console.log(s);
          };

          Function 構造函數(shù)

          var add=new Function(
            'x',
            'y',
            'return x + y'
          );
          
          // 等同于
          function add(x, y) {
            return x + y;
          }

          函數(shù)名提升:JavaScript 引擎將函數(shù)名視同變量名,所以采用function命令聲明函數(shù)時,整個函數(shù)會像變量聲明一樣,被提升到代碼頭部。

          foo();
          function foo() {console('ok')}

          JavaScript函數(shù)知識點還是蠻多的,后面針對函數(shù)這一塊單獨整理。

          數(shù)組

          數(shù)組屬于一種特殊的對象。

          typeof [1, 2, 3] // "object"

          length:JavaScript 使用一個32位整數(shù),保存數(shù)組的元素個數(shù)。這意味著,數(shù)組成員最多只有 4294967295 個(2^32 - 1)個,也就是說length屬性的最大值就是 4294967295。

          數(shù)組遍歷

          var a=[1, 2, 3];
          for (var i in a) {
            console.log(a[i]);
          }

          小結(jié)

          本文要點回顧,歡迎留言交流。

          • JavaScript介紹。
          • JavaScript基本語法。
          • 數(shù)據(jù)類型。

          主站蜘蛛池模板: 另类国产精品一区二区| 无码人妻精品一区二区三区在线 | 精品成人乱色一区二区| 精品久久久中文字幕一区| 亚洲AV无码一区二区二三区软件| 欧美日韩精品一区二区在线视频| 鲁丝片一区二区三区免费| 国产一区二区四区在线观看 | 国产人妖在线观看一区二区| 亚洲国产一区二区a毛片| 99精品国产一区二区三区| 国产在线观看91精品一区| 欧洲精品码一区二区三区| 成人免费视频一区二区三区| 亚洲国产AV一区二区三区四区| 色噜噜狠狠一区二区三区果冻 | 精品一区二区三区高清免费观看| 国产激情一区二区三区在线观看 | 国产乱子伦一区二区三区| 在线观看一区二区精品视频| 亚洲av色香蕉一区二区三区| 99久久精品午夜一区二区| 伊人久久精品一区二区三区| 亚洲福利秒拍一区二区| 亚洲av无码一区二区三区观看| 91精品一区二区综合在线| 一本大道在线无码一区| 日本一区中文字幕日本一二三区视频 | 亚洲av无码一区二区三区四区 | 视频一区二区三区人妻系列| 一区二区三区免费看| 亚洲免费视频一区二区三区 | 免费高清在线影片一区| 国产一区中文字幕在线观看| 国产一区二区三区手机在线观看| 国产一区二区三区在线电影 | 国产99久久精品一区二区| 精品国产日韩亚洲一区91| 无码日韩人妻AV一区免费l| 中文字幕亚洲一区| 3d动漫精品成人一区二区三|