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

首頁 > 語言 > JavaScript > 正文

寫出更好的JavaScript之undefined篇(上)

2024-05-06 14:12:46
字體:
來源:轉載
供稿:網友
“全局變量”和“全局對象的屬性”是指同樣的東西,只是因為要配合上下文才用了不同的說法,正文中我就不再另外解釋了;“聲明”指通過“var”語句聲明變量和/或對函數及其簽名的定義;“變量”指通過“var”語句聲明過或者在函數體中試圖訪問的命名參數;“undefined”指名為“undefined”的值(全局或本地變量),而“未定義”指type(...) == “undefined”的情況;“output”是一個顯示傳入參數的函數,可以看作是“alert”的同類。

我們寫JavaScript程序的時候總有需要用到“未定義”的時候,比方說我們要知道某一個值是不是已經經過賦值,或者我們希望消除某一個已經賦予的值,我們就可能這樣做:
代碼如下:
output(myVar === undefined);
myVar = undefined;

然而這樣做并不太好,如果我們嘗試“讀”(或者比較)一個不存在的變量,就會引發一個異常。
比方說如果因為設計得不夠周全,執行上面的代碼的時候還沒有定義過myVar這個變量,上面的代碼就會出錯;
另外在較早的瀏覽器版本上,也不存在undefined這個預定義值,所以為了提高兼容性和容錯性,我們可以這樣做:
代碼如下:
output(typeof(myVar) == "undefined");
myVar = void(0);

typeof運算符是JavaScript的語言功能,雖然上面的代碼看起來像是這樣的一種東西:
代碼如下:
output(oneFunction(myVar) == "undefined");
myVar = void(0);

但這兩者有一個重要區別——當myVar不存在的時候,前者可以正確執行,并返回字符串"undefined";而后者不管內部構造是什么樣的,都會引發異常。
void則是另一個語言功能,這個運算符的意義是向腳本的其它部分隱藏它的傳入參數;而假如有一個語句試圖得到void“運算”的結果,它就只能得到“未定義”。
因為void的這個特性,void最常見的功能就有兩種:一是像上面的代碼中那樣將“未定義”值賦予給其它變量/屬性;另一種就是像下面這樣:
<a href="javascript:void(favList.push(curItem));">添加到收藏列表</a>
其中favList是一個JavaScript數組,而curItem是一個已經定義的對象——數組的push方法會返回執行push操作以后數組的長度,在這個例子里面這個長度對我們來說一點用都沒有,但如果放任它不管的話,瀏覽器就可能會跳轉到一個幾乎為空白的腳本結果頁面,只顯示push的返回值,比方說“3”。
因此需要用一個void運算符來“欺騙”瀏覽器:這里啥都沒有。
現在把目光回到對“未定義”的使用上,就會發現前面我們用來同“未定義”比較的“高容錯性”的typeof運算符,用起來有點麻煩:總共需要多寫“typeof()""”這樣10個字符。
雖然我們是成天跟麻煩打交道的程序員,但這也不能說明我們不該想辦法減少麻煩啊~各種開發工具其實不都是為了把編程工作變得簡單才出現的么?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 定州市| 蓝田县| 岑溪市| 阜新| 象山县| 曲麻莱县| 额济纳旗| 宜州市| 中山市| 永仁县| 襄垣县| 皮山县| 天水市| 洞口县| 利川市| 易门县| 咸丰县| 台东市| 益阳市| 宁德市| 镇雄县| 宁阳县| 新竹市| 浦江县| 东源县| 凤山市| 固原市| 哈密市| 工布江达县| 广灵县| 阿拉善左旗| 乐至县| 鹤壁市| 义乌市| 通化县| 华阴市| 筠连县| 三河市| 闸北区| 金寨县| 南阳市|