国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

分析 JavaScript 中令人困惑的變量賦值

2024-09-06 12:41:44
字體:
供稿:網(wǎng)友
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>

你的眼睛告訴你,alert出來的是“hello”!這讓人捉摸不透古靈精怪的JavaScript!

周星馳的《國產(chǎn)零零漆》中有類似的一幕:
當星爺剛從深圳到香港執(zhí)行任務(wù)時,袁詠儀從他的行李中發(fā)現(xiàn)一個吹頭發(fā)的風筒,星爺說這其實是個須刨,把皮鞋拿出來一看卻是一個風筒,一個貌似大哥大電話的玩意其實又是一個須刨。須刨與風筒把袁詠儀與觀眾都搞混亂了,哈哈哈哈,這是我很喜歡的一部片,第一次看時肚子都笑痛了。

回過頭來再看看剛才的變量賦值,直接量與引用量的使用,就好像須刨與風筒換來換去,把我們都搞暈了。
其實問題出在對x的第二次賦值 x = ["ni","hao"] 上,我們看看變量在存儲器上變化以及JavaScript在對待字符串類型與對象類型的不同:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兰县| 北流市| 钟祥市| 青铜峡市| 海南省| 怀安县| 轮台县| 白玉县| 句容市| 饶平县| 威信县| 临泉县| 枞阳县| 嵊泗县| 泰来县| 石家庄市| 忻州市| 蒲城县| 连平县| 奇台县| 鄯善县| 漳州市| 崇仁县| 台中县| 乌兰察布市| 米脂县| 平安县| 龙泉市| 新巴尔虎右旗| 广平县| 皮山县| 东兴市| 芦溪县| 顺平县| 潮州市| 竹北市| 溆浦县| 北辰区| 珲春市| 姚安县| 荣昌县|