整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript基礎之對象

          JavaScript基礎之對象

          本文是我學習《你所不知道的javaScript上卷》的讀書筆記的整理。

          更多詳細內容,請微信搜索“前端愛好者

          、for...in 語句


          1.1 遍歷對象屬性名稱

          for...in 語句常用于遍歷特定對象的屬性,包括字段名稱屬性及函數名稱屬性。在JavaScript語言中,它們均稱為屬性 (property)。

          let obj={
            name: 'obj',
          
            showName() {
              console.log(this.name);
            }
          };
          
          for (const propName in obj) {
            console.log(propName, typeof(obj[propName]));
          }

          顯示:

          name – "string"
          showName – "function"

          利用這一點,可方便地查看特定對象的所有屬性或方法名稱。下面語句打印出console對象所有的屬性:

          for (const propName in console) {
            console.log(propName, typeof(console[propName]));
          }

          顯示:

          debug – "function"
          error – "function"
          log – "function"
          info – "function"
          warn – "function"
          clear – "function"
          ...

          可以看出,這些屬性全部均是console的函數名稱,因為console沒有屬性名稱。

          1.2 遍歷數組索引值

          for...in 用于數組中,則遍歷數組索引值。

          let array=['a', 'b', 'c'];
          
          for (const index in array) {
            console.log(index, array[index]);
          }

          顯示:

          0 – "a"
          1 – "b"
          2 – "c"

          1.3 遍歷字符串索引值

          由于字符串是由字符組成的數組,因此 for...in 也可用于遍歷字符串的索引值。

          let str="abc";
          
          for (const index in str) {
            console.log(index, str[index]);
          }

          顯示:

          0 – "a"
          1 – "b"
          2 – "c"

          2、for...of 語句


          for...of 語句用于遍歷可遍歷對象 (iterable objects)的元素。這些可遍歷對象包括字符串、數組、以及類似于數組的對象,這些對象都帶有length屬性。

          2.1 不能用于遍歷對象屬性名稱

          for...of 語句不能用于遍歷對象的屬性名稱。因此,下面的代碼是錯誤的:

          let obj={
            name: 'obj',
          
            showName() {
              console.log(this.name);
            }
          };
          
          for (const propName of obj) {
            console.log(propName);
          }

          顯示:

          TypeError: undefined is not a function (near '...propName of obj...')

          意為,將 for...of 語句用于對象上面,無法提取具體的數值。

          2.2 遍歷數組元素

          for...of 語句經常用于遍歷數組中各元素的數值。

          let arr=[2, 4, 6, 8, 10];
          
          for (const value of arr) {
            console.log(value);
          }

          顯示:

          2
          4
          6
          8
          10

          2.3 遍歷字符串中的字符

          由于字符串是由字符組成的數組,因此 for...of 也可用于遍歷字符串的字符。

          let str="abc";
          
          for (const letter of str) {
            console.log(letter);
          }

          顯示:

          a
          b
          c

          2.4 解包

          數組元素如果是帶有特定屬性名稱的對象,可利用解包性質來快速遍歷這些屬性值。看下面例子。

          function Point(x, y) {
            return {x:x, y:y};
          }
          
          let points=[Point(1, 2), Point(2, 3), Point(4, 5)];
          
          for (const point of points) {
            console.log(point.x, point.y);
          }
          

          可將Point視為一個構造器 (constructor),每次調用Point(x, y)都會創建并返回該類的一個對象,且含有x及y的屬性名稱。points則是一個含有多個Point對象的數組。上面的代碼遍歷出每個Point對象后,賦值于point變量,然后打印出它們的x值及y值。

          如果我們不希望每次都通過引用對象屬性的方式來訪問x及y值,則可編寫代碼如下:

          for (const point of points) {
            let x=point.x;
            let y=point.y;
            console.log(x, y);
          }

          這一步可利用ES6的const解包特性予以簡化:

          for (const point of points) {
            const {x, y}=point;
            console.log(x, y);
          }

          更進一步,我們可以直接解包:

          for (const {x, y} of points) {
            console.log(x, y);
          }

          2.5 遍歷Map

          let scoreMap=new Map([
              ['Mike', 75],
              ['Tom', 80],
              ['Smith', 90]
          ]);
          
          for (const [key, value] of scoreMap) {
              console.log(key, value);
          }

          與上一節不同的是,Map需要使用 [key, value] 的方式來解包。

          3、forEach 方法


          3.1 forEach 常見調用方式

          for...in,for...of 均是語句,與它們不同的是,forEach是數組的內嵌方法。這意味著我們可以直接在數組對象上面直接調用該方法。

          let arr=[1, 3, 5, 7, 9];
          
          arr.forEach((element)=> {
            console.log(element);
          });

          作為數組方法,forEach有一個參數,該參數的類型是函數,稱為回調函數 (callback function)。所謂回調函數,是指一旦程序員提供了這樣的函數,JavaScript引擎將負責調用此函數。

          回調函數的價值在于回調函數可能存在多個參數,而這些參數將由JavaScript引擎自動提供。在回調函數中,我們可對JavaScript引擎所自動提供的參數進行進一步加工。

          在上面的回調函數中,element是由JavaScript引擎自動提供的,代表每個數組元素。

          上面的代碼采用了lambda匿名表達式。它等同于:

          let arr=[1, 3, 5, 7, 9];
          
          function callback(element) {
            console.log(element);
          }
          
          arr.forEach(callback);

          可見,lambda表達式更加簡練。

          3.2 forEach 的參數

          forEach共有3個參數 (上面例子只用了第1個),它們的排列順序如下:

          arr.forEach((element, index, array)=> {
            console.log(element);
            console.log(index);
            console.log(array);
          });

          參數element是數組元素,參數index是數組元素所在數組中的索引值,參數array是整個數組。

          一般情況下,我們僅需用到element及index參數就足夠了。由于是每次迭代,因此,forEach方法中的array參數較少用到。

          index每次遍歷時都會加1,且每次都會與array的長度比較。一旦超出array的界限,就會終止遍歷。如果遍歷過程中,修改了array的長度,則需特別注意這一點。

          3.2 forEach 遍歷的終止

          如何中止forEach的遍歷?JavaScript并未提供這樣的機制,但我們可以用一個雙重嵌套的異常來終止遍歷。

          let arr=[1, 3, 5, 7, 9];
          
          try {
            arr.forEach((element, index, array)=> {
              try {
                console.log(index);
                if (index >=3) {
                  throw new Error('forEach termination signal');
                }
              } catch (error) {
                throw error;
              }
            });
          } catch (e) {
            if (e.message==='forEach termination signal') {
              console.log('forEach terminated.');
            }
          }
          
          console.log('This line of code should be executed.');

          顯示:

          0
          1
          2
          3
          forEach terminated.
          This line of code should be executed.

          我們設定,當index的值大于等于3時,需要終止遍歷。這樣,在第7行,當此條件滿足時,即拋出"forEach termination signal"的異常。

          此時,程序流程轉入到第10行至第12行最內層的異常捕獲處理代碼:

          } catch (error) {
              throw error;
          }

          捕獲異常后,如果我們不重新拋出異常,JavaScript引擎則會認為我們已正確地處理了異常,因此會恢復中斷的遍歷進程,繼續處理下一個數組元素,這不是我們想要的。因此,我們在此重新拋出該異常,以切實終止遍歷。

          這時,forEach的遍歷因異常而終止,從而達到了我們的最初的目標。但因為有異常,如果我們未作任何處理,則該異常會導致整個程序都終止運行。只有在我們處理了異常后,程序才能往下走。這就是第14行至18行最外層異常捕獲代碼的作用:

          } catch (e) {
            if (e.message==='forEach termination signal') {
              console.log('forEach terminated');
            }
          }

          先判斷它是不是"forEach termination signal"。如果是,則簡單地打印一行消息。由于這里未再拋出新的異常,因此JavaScript引擎認為我們已經正確地處理了異常,則繼續執行后面的代碼。這樣,最后一行第20行語句將被執行并打印出"This line of code should be executed."的文本。

          一般來講,如果我們需要在數組的遍歷過程中終止遍歷,不要使用 forEach 語句,使用最傳統的方式即可:

          let arr=[1, 3, 5, 7, 9];
          
          for (let i=0; i < arr.length; i++) {
            console.log(i, arr[i]);
            if (i >=3) {
              break;
            }
          }
          
          console.log('This line of code should be executed.');

          這樣即可在遍歷中訪問數組的索引值與數組元素,又可以極為方便地隨時終止遍歷。

          JavaScript中的對象是擁有屬性和方法的數據,今天小編將為大家帶來大數據編程入門:JavaScript對象。

          真實生活中的對象,屬性和方法

          真實生活中,手機是一個對象,并且有它的屬性,如品牌和顏色等,方法有開機關機等。

          比如對象為手機(phone),屬性有:

          phone.name=Redmi

          phone.color=black

          phone.size=6.67inch

          phone.processor=phegda1200

          方法有:

          phone.start()

          phone.working()

          phone.call()

          phone.stop()

          所有的手機都有這些屬性,但是每款手機的屬性都不一樣;以及所有手機都擁有這些方法,但是它們被執行的時間可能會不一樣。

          JavaScript對象

          在JavaScript中,幾乎所有的事物都是對象。

          注意:在JavaScript中,對象非常重要。理解對象后,就可以理解JavaScript。

          在下面的代碼中變量為phone,所設置的值為”Redmi”:

          var phone=“Redmi”;

          一個對象也是一個變量,但是一個對象可以包含多個值(多個變量),并且每個值都以name:value的形式呈現。

          var phone={name:”Redmi”,color:”black”};

          在上面的示例中,兩個值(“Redmi”,”black”)賦予變量phone。

          注意:在JavaScript中的對象是變量的容器。

          對象定義

          可以在JavaScript中使用字符定義和創建對象:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>創建 JavaScript 對象。</p>

          <p id="demo"></p>

          <script>

          var person={firstName:"路飛", lastName:"夢奇", age:20, eyeColor:"blue"};

          document.getElementById("demo").innerHTML=

          person.firstName + " 現在 " + person.age + " 歲.";

          </script>

          </body>

          </html>

          運行結果:


          在JavaScript中定義對象可以跨越多行,不強制要求空格和換行:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>創建 JavaScript 對象。</p>

          <p id="demo"></p>

          <script>

          var person={

          firstName : "路飛",

          lastName : "夢奇",

          age : 20,

          eyeColor : "black"

          };

          document.getElementById("demo").innerHTML=

          person.firstName + " 現在 " + person.age + " 歲。";

          </script>

          </body>

          </html>

          運行結果:

          對象屬性

          可以說“JavaScript對象是變量的容器”。

          然而,我們通常認為“JavaScript對象是鍵值對的容器”。

          鍵值對通常寫為name:value(鍵和值用冒號分隔)。

          鍵值對在JavaScript對象中通常稱為對象屬性。

          注意:在JavaScript中的對象是屬性變量的容器。

          對象鍵值對的寫法類似于:

          PHP 中的關聯數組

          Python 中的字典

          C 語言中的哈希表

          Java 中的哈希映射

          Ruby 和 Perl 中的哈希表

          訪問對象屬性

          在JavaScript中可以通過兩種方式來訪問對象屬性:

          示例1:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>

          有兩種方式可以訪問對象屬性:

          </p>

          <p>

          你可以使用 .property 或 ["property"].

          </p>

          <p id="demo"></p>

          <script>

          var person={

          firstName : "索隆",

          lastName : "羅羅諾亞",

          id : 1

          };

          document.getElementById("demo").innerHTML=

          person.firstName + " " + person.lastName;

          </script>

          </body>

          </html>

          運行結果:

          示例2:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>

          有兩種方式可以訪問對象屬性:

          </p>

          <p>

          你可以使用 .property 或 ["property"]。

          </p>

          <p id="demo"></p>

          <script>

          var person={

          firstName: "索隆",

          lastName : "羅羅諾亞",

          id : 5566

          };

          document.getElementById("demo").innerHTML=

          person["firstName"] + " " + person["lastName"];

          </script>

          </body>

          </html>

          運行結果:

          對象方法

          對象的方法定義函數并作為對象的屬性存儲。

          通過添加()調用對象方法(作為函數)。

          此實例訪問person對象的fullname()方法:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>創建和使用對象方法。</p>

          <p>對象方法作為一個函數定義存儲在對象屬性中。</p>

          <p id="demo"></p>

          <script>

          var person={

          firstName: "索隆",

          lastName : "羅羅諾亞",

          id : 5566,

          fullName : function()

          {

          return this.firstName + " " + this.lastName;

          }

          };

          document.getElementById("demo").innerHTML=person.fullName();

          </script>

          </body>

          </html>

          運行結果:

          如果要訪問person對象的fullname屬性,它將作為定義函數的字符串返回:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Miuku</title>

          </head>

          <body>

          <p>創建和使用對象方法。</p>

          <p>對象方法是一個函數定義,并作為一個屬性值存儲。</p>

          <p id="demo1"></p>

          <p id="demo2"></p>

          <script>

          var person={

          firstName: "路飛",

          lastName : "夢奇",

          id : 9,

          fullName : function()

          {

          return this.firstName + " " + this.lastName;

          }

          };

          document.getElementById("demo1").innerHTML="不加括號輸出函數表達式:" + person.fullName;

          document.getElementById("demo2").innerHTML="加括號輸出函數執行結果:" + person.fullName();

          </script>

          </body>

          </html>

          運行結果:

          訪問對象方法

          可以使用以下語法創建對象方法:

          methodName : function() {

          // 代碼

          }

          可以使用下面的語法訪問對象:

          objectName.methodName()

          通常,fullname()是作為person對象的方法,而fullname是一個屬性。

          如果使用fullname屬性,而不添加(),它將返回函數的定義:

          objectName.methodName

          有許多方法可以創建、使用和修改JavaScript對象。

          同樣的,還有許多方法可以創建、使用和修改屬性和方法。

          以上就是關于大數據編程入門:JavaScript對象的全部內容了,希望這篇文章可以幫助到大家~


          主站蜘蛛池模板: 国产99精品一区二区三区免费 | 色欲AV蜜桃一区二区三| 亚洲无人区一区二区三区| 亚洲一区二区三区成人网站| 日本一区中文字幕日本一二三区视频| 亚洲福利秒拍一区二区| 免费日本一区二区| 国产精品一区三区| 国产成人片视频一区二区| 国产乱码一区二区三区| 精品国产一区AV天美传媒| 色老头在线一区二区三区 | 国产av天堂一区二区三区| 无码少妇一区二区浪潮av| 日韩精品一区二区三区在线观看| 国产麻豆精品一区二区三区| 国产人妖视频一区二区破除| 亚洲一区二区三区乱码A| 一区二区不卡视频在线观看| 78成人精品电影在线播放日韩精品电影一区亚洲 | 成人H动漫精品一区二区 | 99精品国产一区二区三区| 国产精品乱码一区二区三区| 精品人妻一区二区三区毛片| 中文字幕av一区| 精品国产高清自在线一区二区三区| 国产伦精品一区二区三区视频小说 | 国产天堂在线一区二区三区 | 日本美女一区二区三区| 亚洲精品日韩一区二区小说| 日韩视频一区二区| 久久久91精品国产一区二区| 中文字幕AV一区二区三区| 国产免费一区二区三区免费视频| 久久福利一区二区| 国产A∨国片精品一区二区| 亚洲综合无码一区二区| 亚洲国产成人久久一区WWW| 波多野结衣久久一区二区| 久久精品视频一区| 一区二区三区在线观看中文字幕|