Javascript是一門弱類型的語言,聲明變量不需要聲明其類型,var x 就可以等于任何類型的值。 比如:
var str = "string...."; var arr = ["this","is","array"]; var obj = {name:"caizhongqi",age:26,sex:"male"}; 這些都是正確的,這似乎非常簡單方便,但是這種方便也會帶來一些令人難于捉摸的意外,看看下面的例子(例1):
<script> var x = "this is string"; var y = x; x="ni hao"; alert(y) </script>
你可能一下子知道alert出來的就是“this is string”,沒錯,但對于用Java語言的程序員來說,var y=x 應(yīng)該是把x在存儲器中的地址(指針)賦給y變量才對,因此他們覺得應(yīng)該alert出“ni hao”才會更符合Java語言的習慣,但JavaScript語言不是這樣,字符串的賦值是直接量操作,直接把數(shù)據(jù)copy給y的存儲空間。
再看看下面的例子(例2):
<script> var x = ["hello"] // 這是一個數(shù)組,只有一個元素,并且該元素為字符串類型 var y = x; x[0] = "world"; alert(y[0]); </script>
如果你還以為alert出來的是“hello”,那就錯了。當 var y = x 時,x不是已經(jīng)把它的數(shù)組給了y嗎?但事實上卻不是這樣, 當 var y = x 時,x傳的是它在存儲器中的地址(指針)!x[0]="world" 修改了在原存儲位置上的數(shù)據(jù),因此alert(y[0])就是拿x的新值出來alert。混亂了吧?怎么一會兒是直接量一會兒是引用量呢? 不急,下面的例子將更加混亂(例3):
<script> var x = ["hello"] // 這是一個數(shù)組,只有一個元素,并且該元素為字符串類型 var y = x; x = ["ni","hao"]; // x 將變成一個新的數(shù)組了。 alert(y[0]); </script>