1. 程式人生 > >JavaScript裡的var變數

JavaScript裡的var變數

最近學了一點HTML和JavaScript。 在JavaScript裡面有var變數,而且好像只有var變數。換句話說var就是個萬精油,他沒有確定的型別,他的型別取決於賦值給他的變數的型別。例如:        

var a = 123;
var b = "123";
var c = document.getElementById("表單id");

a是數字,而b是字串,c則是物件。var變數既有優點也有缺點。優點就是我們在宣告變數時,統一都用var就OK了,不用去考慮是什麼型別。而缺點就是用著用著你可能就不知道這個變數到底是什麼型別的了。為了解決這個問題,我把所有的var儘量賦值為物件。例如我們要獲取表單的值,我會這樣做:

var d = document.getElementById("表單id");
d.value;//獲取d的值

而不是這樣:

var d = document.getElementById("表單id").value;

這兩種方法都可獲取表單裡的值,但是第一種更好。第一,獲取一個物件後我們還可以進行其他操作,而獲取單一字串能進行的操作就十分有限了。第二,如果工作量十分大的話,過了一段時間後你還知道d到底是物件還是字串嗎?所以統一標準對於我們程式設計十分重要。

這裡還要給大家提個醒的是,JavaScript裡的物件和java裡面一樣,變數只是物件的管理者而不是物件的擁有者。下面舉個例子:

<form>
        <input type="text" name="username1" id="username1">
        <input type="submit" onclick="getUsername()">
    </form>
    <script>
        function getUsername(){
            var username2 = document.getElementById("username1");
            username2.value = "123";
        }
    </script>
</form>

假如我在表單裡填入abc,那麼我提交後,後臺獲取的資料是什麼呢?答案是123!不熟悉java的小夥伴可能會覺得不可思議:我只是在javaScript裡把一個新的變數username2的值改了嘛,username1的值為什麼會變了呢?這就是Java語言的特性,變數只是物件的管理者而不是物件的擁有者。所以username1,username2共同管理一個物件,所以username2改變了,username1也當然改變了。這就是為什麼很多同學在剛開始學JavaScript時不理解:為什麼函式裡的變數改變,會影響到函式外的變數。這跟c語言傳指標進入函式是一樣道理。