1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      JavaScript精粹基礎(chǔ)進(jìn)階(3)語句

      轉(zhuǎn)載請注明出處

      雨花網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

      原文連接http://blog.huanghanlian.com/article/5b698ec8b8ea642ea9213f4b

      語句

      語句、嚴(yán)格模式

      JavaScript程序由語句組成,語句遵守特定的語法規(guī)則。例如:if語句, while語句, with語句等等。

      語句種類

      JavaScript 精粹 基礎(chǔ) 進(jìn)階(3)語句

      塊 block

      塊語句常用于組合0 ~ 多個語句。塊語句用一對花括號定義。

      語法:
      {
        語句1;
        語句2;
        ...
        語句n;
      }
      比如
      {
          var str = "hi";
          console.log(str);
      }//但在實際開發(fā)中,很少單獨使用塊語句
      而是用if...else  或者for  while去結(jié)合起來使用,
      
      if(true){
      //然后{}是一個塊,
      然后{里面可以放多條語句}
       console.log('hi');
      }

      聲明語句 var

      聲明變量語句
      var a=1;
      
      在一個var里也可以聲明多個變量
      var a=b=1;
      這段語句確實創(chuàng)建了a,b兩個變量并且賦值為1,但是其中b實際上是隱式的創(chuàng)建了全局變量,不信看下面的例子
      
      function foo() {
          var a = b = 1;
      }
      foo();
      
      console.log(typeof a);  // ‘undefined’
      console.log(typeof b);  // ‘number  
      
      在一條語句里定義多個變量的方式使用,號分隔
      var a=1,b=1;

      try catch語句

      try {    //工作流程首先執(zhí)行try,catch中的代碼
          throw "test";    //如果拋出了異常  ,如果沒有發(fā)生異常catch中的代碼就會被忽略掉
      } catch (ex) {    //會由catch去捕獲
          console.log(ex); // test    //并執(zhí)行
      } finally {    //finally 不管有沒有異常,finally 都會執(zhí)行
          console.log('finally');
      }
      
      javascript中try...catch可以有三種形式
      try {
          throw "test";
      } catch (ex) {
          console.log(ex); // test
      }
      
      try {
          throw "test";
      }finally {
          console.log('finally');
      }
      
      //還有一種就是兩者皆有
      try {
          throw "test";
      } catch (ex) {
          console.log(ex); // test
      } finally {
          console.log('finally');
      }

      例子1

      try {
          // do sth.
      } finally {
          console.log('finally');
      }
      //不管有沒有異常最后都有執(zhí)行finally中的內(nèi)容

      例子2

      try {
          try {
              throw new Error("oops");
          }
          finally {
              console.log("finally");
          }
          //內(nèi)部try沒有catch,那么他會跳到最近的catch,也就是外層的catch去處理,再跳出block之前需要先執(zhí)行finally
      }
      catch (ex) {
          console.error("outer", ex.message);
      }
      //所以這里的執(zhí)行結(jié)果
      "finally"
      "outer" "oops"

      例子3

      try {
        try {
          throw new Error("oops");
        }
        catch (ex) {
          console.error("inner", ex.message);
        }
        finally {
          console.log("finally");
        }
      }
      catch (ex) {
        console.error("outer", ex.message);
      }//由于內(nèi)部異常已經(jīng)處理過,所以不會再跳出到外部處理
      執(zhí)行結(jié)果
      "inner" "oops"
      "finally"

      例子4

      try {
        try {
          throw new Error("oops");
        }
        catch (ex) {
          console.error("inner", ex.message);
          throw ex;
        }
        finally {
          console.log("finally");
        }
      }
      catch (ex) {
        console.error("outer", ex.message);
      }//由于內(nèi)部catch再次拋出異常就會由外部catch來處理
      執(zhí)行結(jié)果是
      "inner" "oops"
      "finally"
      "outer" "oops"

      function語句

      函數(shù)聲明

      fd(); // true
      function fd() {
          // do sth.
          return true;
      }

      函數(shù)表達(dá)式

      fe(); // TypeError
      var fe = function() {  //定義變量fe,然后把一個匿名函數(shù)賦值給fe
          // do sth.
      };

      兩者區(qū)別在函數(shù)聲明前面調(diào)用函數(shù)也是可以的,函數(shù)表達(dá)式就不可以。

      for...in語句

      var p;
      var obj = {x : 1, y: 2}
      
      for (p in obj) {
      }
      1. 順序不確定
      2. enumerable為false時不會出現(xiàn)
      3. for in對象屬性時受原型鏈影響

      switch語句

      例子1

      var val = 2;
      
      switch(val) {
          case 1:
              console.log(1);
              break;
          case 2:
              console.log(2);    //val==2,會執(zhí)行這段代碼
              break;             //使用 break 來阻止代碼自動地向下一個 case 運(yùn)行。
          default:               //使用 default 關(guān)鍵詞來規(guī)定匹配不存在時做的事情
              console.log(0);
              break;
      }

      例子2

      var val = 2;
      
      switch(val) {
          case 1:
              console.log(1);
          case 2:
              console.log(2);
          default:
              console.log(0);
      }
      //輸出2,0

      例子3

      var val = 2;
      
      switch(val) {
          case 1:
          case 2:
          case 3:
              console.log(123);
              break;
          case 4:
          case 5:
              console.log(45); 
              break;
          default:
              console.log(0);
      }
      //輸出123

      循環(huán)語句while

      while (條件)
      {
          需要執(zhí)行的代碼
      }

      例子

      var x="",i=0;
      while (i<5){
          x=x + "該數(shù)字為 " + i ;
          i++;
      }
      console.log(x);

      do/while 循環(huán)

      do
      {
          需要執(zhí)行的代碼
      }
      while (條件);

      例子

      var x="",i=0;
      do{
          x=x + "該數(shù)字為 " + i;
          i++;
      }
      while (i<5)  
      console.log(x)
      //該數(shù)字為 0該數(shù)字為 1該數(shù)字為 2該數(shù)字為 3該數(shù)字為 4

      JavaScript for 循環(huán)

      cars=["BMW","Volvo","Saab","Ford"];
      for (var i=0;i

      不同類型的循環(huán)

      JavaScript 支持不同類型的循環(huán):

      for- 循環(huán)代碼塊一定的次數(shù)

      for/in- 循環(huán)遍歷對象的屬性

      while- 當(dāng)指定的條件為 true 時循環(huán)指定的代碼塊

      do/while- 同樣當(dāng)指定的條件為 true 時循環(huán)指定的代碼塊

      with語句

      with 語句可以方便地用來引用某個特定對象中已有的屬性,但是不能用來給對象添加屬性。要給對象創(chuàng)建新的屬性,必須明確地引用該對象

      語法格式

      with(object instance)
      {
          //代碼塊
      }

      舉例

      function Lakers() {
         this.name = "kobe bryant";
         this.age = "28";
         this.gender = "boy";
      }
      var people=new Lakers();
      console.log(people)
      with(people)
      {
         var str = "姓名: " + name + "
      "; str += "年齡:" + age + "
      "; str += "性別:" + gender; document.write(str); } // 姓名: kobe bryant // 年齡:28 // 性別:boy
      1. 讓JS引擎優(yōu)化更難
      2. 可讀性差
      3. 可被變量定義代替
      4. 嚴(yán)格模式下被禁用

      JavaScript 嚴(yán)格模式

      嚴(yán)格模式是一種特殊的執(zhí)行模式,
      它修復(fù)了部分語言上的不足, 提供更強(qiáng)的錯誤檢查,并增強(qiáng)安全性。

      function func() {
          'use strict';
      }
      
      'use strict';
      function func() {
      
      }

      不允許用with

      !function() {
          with({x : 1}) {
              console.log(x);
          }
      }();
      //輸出1
      
      !function() {
          'use strict';
           with({x : 1}) {
              console.log(x);
          }
      }();
      SyntaxError報錯

      不允許未聲明的變量被賦值

      !function() {
           x = 1;    //全局變量
            console.log(window.x);
      }();
      //輸出1
      
      !function() {
          'use strict';
           x = 1;
            console.log(window.x);
      }();
      //ReferenceError
      //在use strict如果沒有被聲明的變量會報錯

      arguments變?yōu)閰?shù)的靜態(tài)副本

      arguments.length 屬性返回函數(shù)調(diào)用過程接收到的參數(shù)個數(shù):
      arguments屬性返回函數(shù)調(diào)用過程接收到的值

      一般模式下

      !function(a) {
          arguments[0] = 100;//給函數(shù)第一個值變成100
          console.log(a);//輸出的a變成100
      }(1);
      //輸出100
      
      !function(a) {
          arguments[0] = 100;
          console.log(a);
      }();//如果()沒有傳值arguments長度為空所以更改arguments的值不成立
      輸出undefined

      嚴(yán)格模式下

      !function(a) {
          'use strict';
          arguments[0] = 100;
          console.log(a);
      }(1);
      //1
      
      !function(a) {
          'use strict';
          arguments[0].x = 100;
          console.log(a.x);
      }({x:1});
      //100

      delete參數(shù)、函數(shù)名報錯

      一般模式下

      !function(a) {
          console.log(delete a);
      }(1);
      //false

      'use strict';模式下

      !function(a) {
          'use strict';
          delete a;
      }(1);
      SyntaxError報錯語法錯誤

      delete不可配置的屬性報錯

      一般模式下

      !function(a) {
          var obj = {};
          Object.defineProperty(obj, 
              'a', {configurable : false});
          console.log(delete obj.a);
      }(1);
      //false

      'use strict';模式下

      !function(a) {
          'use strict';
          var obj = {};
          Object.defineProperty(obj, 
              'a', {configurable : false});
          delete obj.a;
      }(1);
      //TypeError報錯

      對象字面量重復(fù)屬性名報錯

      一般模式下

      !function() {
          var obj = {x : 1, x : 2};//對象屬性字面量去重復(fù)去寫屬性,這樣也是合法的,屬性以最后一個為準(zhǔn)
          console.log(obj.x);
      }();
      //輸出為2

      'use strict';模式下

      !function() {
          'use strict';
          var obj = {x : 1, x : 2};
      }();
      
      //嚴(yán)格模式下
      //SyntaxError報錯

      禁止八進(jìn)制字面量

      一般模式下

      !function() {
          console.log(0123);//8進(jìn)制的值
      }();
      //輸出83

      在嚴(yán)格模式下是不允許8進(jìn)制

      !function() {
          'use strict';
          console.log(0123);
      }();
      //SyntaxError報錯語法錯誤

      eval, arguments變?yōu)殛P(guān)鍵字,不能作為變量、函數(shù)名

      一般模式

      !function() {
          function eval(){}
          console.log(eval);
      }();
      //function eval(){}

      嚴(yán)格模式

      !function() {
          'use strict';
          function eval(){}
      }();
      //SyntaxError語法錯誤

      eval獨立作用域

      一般模式

      !function() {
          eval('var evalVal = 2;');      //在eval函數(shù)下定義變量evalVal等于數(shù)字2
          console.log(typeof evalVal);   //evalVal所在的函數(shù)內(nèi)部仍然可以拿到 evalVal
      }();
      //所以輸出number

      嚴(yán)格模式

      !function() {
          'use strict';
          eval('var evalVal = 2;');    //eval代碼會在獨立作用域執(zhí)行
          console.log(typeof evalVal); //這里拿evalVal是拿不到的
      }();
      //所以輸出undefined
      嚴(yán)格模式總結(jié)

      不允許用with
      所有變量必須聲明, 賦值給為聲明的變量報錯,而不是隱式創(chuàng)建全局變量。
      eval中的代碼不能創(chuàng)建eval所在作用域下的變量、函數(shù)。而是為eval單獨創(chuàng)建一個作用域,并在eval返回時丟棄。
      函數(shù)中得特殊對象arguments是靜態(tài)副本,而不像非嚴(yán)格模式那樣,修改arguments或修改參數(shù)變量會相互影響。
      刪除configurable=false的屬性時報錯,而不是忽略
      禁止八進(jìn)制字面量,如010 (八進(jìn)制的8)
      eval, arguments變?yōu)殛P(guān)鍵字,不可作為變量名、函數(shù)名等

      一般函數(shù)調(diào)用時(不是對象的方法調(diào)用,也不使用apply/call/bind等修改this)this指向null,而不是全局對象。
      若使用apply/call,當(dāng)傳入null或undefined時,this將指向null或undefined,而不是全局對象。
      試圖修改不可寫屬性(writable=false),在不可擴(kuò)展的對象上添加屬性時報TypeError,而不是忽略。
      arguments.caller, arguments.callee被禁用

      嚴(yán)格模式是一種特殊的運(yùn)行模式,
      它修復(fù)了部分語言上的不足, 提供更強(qiáng)的錯誤檢查,并增強(qiáng)安全性。


      本文標(biāo)題:JavaScript精粹基礎(chǔ)進(jìn)階(3)語句
      文章位置:http://ef60e0e.cn/article/pogigo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
        1. <ul id="0c1fb"></ul>

          <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
          <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

          南华县| 漾濞| 周至县| 吴堡县| 澄江县| 桦川县| 正蓝旗| 东乡县| 绥宁县| 双城市| 无锡市| 体育| 偃师市| 安溪县| 五台县| 江油市| 白银市| 偃师市| 洪江市| 凤冈县| 临澧县| 弋阳县| 建宁县| 神木县| 五家渠市| 关岭| 连云港市| 晴隆县| 洪泽县| 金寨县| 成武县| 宁城县| 绍兴县| 长沙县| 台北县| 泰州市| 庆安县| 石林| 百色市| 普宁市| 阿拉善左旗|