1. 程式人生 > 程式設計 >JavaScript預解析,物件詳解

JavaScript預解析,物件詳解

目錄
  • 一、預解析
    • 1、變數預解析和函式預解析
      • 1、變數預解析
      • 2、函式預解析
    • 2、預解析案例
    • 二、物件
      • 1、建立物件的三種方式
        • 1、利用字面量建立物件
        • 2、利用new Object建立物件
        • 3、利用建構函式建立物件
        • 4、建構函式和物件
      • 2、new關鍵字
        • 3、遍歷物件屬性
        • 總結

          一、預解析

          1、變數預解析和函式預解析

          程式碼是由瀏覽器中的 ScrisSaJfPpt 解析器來執行的。JavaScript 解析器在執行 JavaScript 程式碼的時候分為兩步:預解析和程式碼執行。

          • 預解析:在當前作用域下,程式碼執行之前,瀏覽器會預設把帶有 var 和 function 宣告的變數在記憶體中進行提前宣告或者定義。
          • 程式碼執行: 從上到下執行JS語句。

          預解析只會發生在通過 var 定義的變數和 function 上。學習預解析能夠讓我們知道為什麼在變數宣告之前訪問變數的值是 undefined,為什麼在函式宣告之前就可以呼叫函式。預解析也叫做變數、函式提升。

          1、變數預解析

          變數預解析: 變數的宣告會被http://www.cppcns.com提升到當前作用域的最上面,變數的賦值不會提升。

          例如:

            /*先解析var變數num
            然後執行console輸出
            最後把10賦給num*/
          console.log(num);  // 結果是多少?
          var num = 10;      // ?
          

          2、函式預解析

          函式預解析: 函式的宣告會被提升到當前作用域的最上面,但是不會呼叫函式。

          /*先解析fn函式的定義
          然後執行console語句*/
          console.log("1+2+3+...+100=",fn());
          		function fn(){
          			var s = 0;
          			for(var i=1;i<=100;i++){
          				s += i;
          			}
          			return s;
          		}
          

          2、預解析案例

          來做一個小練習,看一下輸出的結果是多少?

          console.log((a));
          var a = 1;
           console.log((a));
           function a(){
              return a;
           }
          

          結果為:

          在這裡插入圖片描述

          二、物件

          在 JavaScript 中,物件是一組無序的相關屬性和方法的集合,所有的事物都是物件,例如字串、數值、陣列、函式等。

          物件是由屬性和方法組成的。

          • 屬性:事物的特徵,在物件中用屬性來表示(常用名詞)
          • 方法:事物的行為,在物件中用方法來表示(常用動詞)

          1、建立物件的三種方式

          1、利用字面量建立物件

          物件字sSaJfP面量:就是花括號 { } 裡面包含了表達這個具體事物(物件)的屬性和方法。{ } 裡面採取鍵值對的形式表示 。

          • 鍵:相當於屬性名
          • 值:相當於屬性值,可以是任意型別的值(數字型別、字串型別、布林型別,函式型別等)
          var star = {
              name : 'xl',age : 18,sex : '女',sayStudy : function(){
                  console.log('好好學習啊');
              }
          };
          

          物件裡面的屬性呼叫 : 物件.屬性名 ,這個小點 . 就理解為“ 的 ” 。例如:star.name

          物件裡面屬性的另一種呼叫方式 : 物件[‘屬性名'],注意方括號裡面的屬性必須加引號。例如:star['age']

          2、利用new Object建立物件

          和前面學習的new Array() 建立陣列原理一致

          var andy = new Object();
          andy.name = 'xl';
          andy.age = 18;
          andy.sex = '女';
          andy.sayStudy = function(){
             console.log('好好學習啊');
          }
          
          • Object() :第一個字母大寫
          • new Object() :需要 new 關鍵字
          • 使用的格式:物件.屬性 = 值;

          3、利用建構函式建立物件

          建構函式 :是一種特殊的函式,主要用來初始化物件,即為物件成員變數賦初始值,它總與 new 運算子一起使用。我們可以把物件中一些公共的屬性和方法抽取出來,然後封裝到這個函式裡面。

          在 js 中,使用建構函式要時要注意以下兩點:

          • 建構函式用於建立某一類物件,其首字母要大寫
          • 建構函式要和 new 一起使用才有意義

          例如:

          function MyName(name,age,sex){
              this.name = name;
              this.age = age;
              this.sex = sex;
          }
          var xl = new MyName('熊柳','18','女');
          var huan = new MyName('王歡','16','女');
          console.log('xl.name='+xl.name);
          console.log('huan:');
          console.log(huan);
          

          列印結果為:

          在這裡插入圖片描述

          注意

          • 建構函式約定首字母大寫。
          • 函式內的屬性和方法前面需要新增 this ,表示當前物件的屬性和方法。
          • 建構函式中不需要 return 返回結果。
          • 當我們建立物件的時候,必須用 new 來呼叫建構函式。

          4、建構函式和物件

          • 建構函式,抽象了物件的公共部分,封裝到了函式裡面,它泛指某一大類(class)
          • 建立物件,特指某一個,通過 new 關鍵字建立物件的過程我們也稱為物件例項化。

          2、new關鍵字

          new 在執行時會做四件事情:

          1.在記憶體中建立一個新的空物件。

          2.讓 this 指向這個新的物件。

          3.執行建構函式裡面的程式碼,給這個新物件新增屬性和方法。

          4.返回這個新物件(所以建構函式裡面不需要return)。

          3、遍歷物件屬性

          for…in 語句用於對陣列或者物件的屬性進行迴圈操作。

          其語法如下:

          for (變數 in 物件名字) {
              // 在此執行程式碼
          }
          

          語法中的變數是自定義的,它需要符合命名規範,通常我們會將這個變數寫為 k 或者 key。

          for (var k in obj) {
              console.log(k);      // 這裡的 k 是屬性名
              console.log(obj[k]); // 這裡的 obj[k] 是屬性值
          }
          

          例如構建瞭如下物件

          function Hero(name,type,blood,attack){
              this.name = name;
              this.type = type;
              this.blood = blood;
              this.attack = attack;
          }
          var lianpo = new Hero('廉頗','力量型','500血量','近戰');
          var houyi = new Hero('后羿','射手型','100血量','遠端');
          

          當執行for..in語句時,列印k和obj[k]會分別得到如下結果:

          function Hero(name,type,attack){
              this.name = name;
              this.type = type;
              this.blood = blood;
              this.attack = attack;
          }
          sSaJfPvar lianpo = new Hero('廉頗','遠端');
          

          在這裡插入圖片描述

          for(k in lianpo){
              console.log(lianpo[k]);
          }
          

          在這裡插入圖片描述

          總結

          本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!