JavaScript變數與範圍

來源:互聯網
上載者:User
1.JavaScript的變數類型
   JavaScript的變數分為基本類型和參考型別.基礎資料型別 (Elementary Data Type)是直接存在棧空間的簡單資料區段,這種類型直接將值儲存在記憶體的某個位置.引用資料類型儲存的是指向實際儲存於堆記憶體中的對象的地址.
   JavaScript中的基礎資料型別 (Elementary Data Type)共有五種:Number,Null,Undefined,Boolean和String.需要注意的是,js中的String是基礎資料型別 (Elementary Data Type).
   對於基本類型變數的訪問,是按值訪問的,而對於引用變數的訪問是按引用訪問的.
2.動態屬性
   對於引用資料類型的變數,可以對其添加屬性和方法,也可以刪除屬性和方法,例如:
1 var p = new Object(); 
2 p.name = "張三";
3 alert(p.name);//張三
    但是對於基礎資料型別 (Elementary Data Type)來說,這樣是不允許的,如下:
1 var str = "張三"; 
2 str.age = 20;
3 alert(str.age);//undefined
    3.複製變數值    對於基本類型的變數,從一個變數向另一個變數複製,實際上是將第一個變數儲存的值複製給另一個變數。因此,複製完成之後,對第一個變數進行修改,修改操作不會影響另一個變數的值。例如;
1 var num1 = 1; 
2 var num2 = num1;
3 alert(num2);//1
4 num1 = 2;
5 alert(num2);//1
    但是對於引用資料類型,將一個變數複製給另一個變數,實際上是儲存第一個變數所儲存的地址拷貝給另一個變數,換句話說,這兩個變數之後就指向同一塊記憶體空間。因此,接下來對第一個變數的操作也會影響第二個變數。例如:
1 var p1 = newObject(); 
2 p1.name = "張三";
3 p1.age = 20;
4 var p2 = p1;
5 alert(p2.age);//20
6 p1.age = 30;
7 alert(p2.age);//30
    4.參數傳遞    JavaScript的參數傳遞全部是按值傳遞。也就是說,將函數外部的值複製給函數的參數。對於基本類型來說,和變數的複製是一樣的,對於引用資料類型,則如同引用資料類型的複製一樣。下面分別舉例說明:
1 function inc(num) { 
2 num += 1;
3 }
4 var i = 10;
5 alert(i);//10
6 inc(i);
7 alert(i);//10
    對於基本類型變數i,將其傳遞給函數inc,實際上是將其值10傳遞給函數inc的參數,在函數內部,對其內部的變數進程加1操作,因此不會影響i。再看下面的代碼:
1 function setName(obj) { 
2 obj.name = "張三";
3 }
4 var person = newObject();
5 setName(person);
6 alert(person.name);//張三
    將person傳遞給函數setName,於是將person所指向的堆記憶體位址傳遞給函數的參數,因此,參數指向的記憶體和person指向的記憶體是同一個地址。因此在函數內部修改該地址指向對象的內容也會反映到person上來。    5.檢測變數的類型    檢測基本類型,使用typeof運算子即可,例如:
 1 var s = "張三"; 
2 var b = true;
3 var i = 20;
4 var u;
5 var n = null;
6 var o = new Object();
7 alert(typeof s);//string
8 alert(typeof b);//boolean
9 alert(typeof i); //number
10 alert(typeof u); //undefined
11 alert(typeof n); //object
12 alert(typeof o); //object
    但是,在檢測引用資料類型方面,typeof並不給力,需要使用instanceof運算子:
1 alert(person instanceof Object);//person是不是Object類型的?

    6.變數範圍

    js的範圍主要有兩種:全域範圍和局部範圍。值得一提的是,在js中,沒有塊級作用於。例如:
1 for(var i = 0; i < 10; i++) { 
2 //do sth
3 }
4 alert(i);//10
    以上面的代碼為例,for語句塊不存在一個特別的範圍,因此在for迴圈之外,i依然可以被訪問到。同理,對於if-else語句也是這樣的。
1 if(true) { 
2 color = "red";
3 }
4 alert(color);//red

    但是還是有辦法臨時的增加一種新的範圍,主要體現在try-catch和with語句。

 參考書:《JavaScript進階程式設計》
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.