作者mchen11 (mchen11)
看板Ajax
標題[問題] undefined 改變值
時間Tue Dec 4 11:18:34 2012
js 的 undefined 是全域變數,但非保留字,所以可以改變值,不過書上寫「千萬
別這麼做」。我試著改變他的值,但也看不出有什麼影響,例如
var a;
var undefined = "aa";
alert(typeof a); // 一樣顯示 undefined
以我的功力是看不出改 undefined 有什麼用處,但這個網頁:
http://www.cnblogs.com/leadzen/archive/2009/02/18/1387750.html
留言 43 樓表示 jquery 的結構可確保 undefined 不是被惡意修改過的值。
想請教高手,惡意修改 undefined 可以做什麼事呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.175.50
1F:推 colmash:可以讓接手你工作的人debug時幹翻吧XDDDD 12/04 11:58
2F:→ mchen11:XD......(筆記) 12/04 12:30
3F:→ musie:有些回圈會檢查next是不是undefined 你改了 就變無窮回圈 12/04 13:35
4F:→ musie:這是最常見的情形吧 12/04 13:35
5F:→ mchen11:請問m大 如我文中舉的例子 就算把undefined改了 檢查 12/04 15:44
6F:→ mchen11:typeof a 還是一樣顯示 undefined 看來不會影響檢查啊? 12/04 15:44
7F:→ nenpow:有些瀏覽器像Chrome不會讓你改undefined的值 12/04 17:30
8F:→ nenpow:你可能必須要在比較舊的瀏覽器才試的出來 12/04 17:31
9F:→ grence:if(b==undefined)b=123 12/04 21:43
10F:→ mchen11:謝謝g大,這個例子很好 12/05 09:17
11F:→ mchen11:我測過了 IE8 可以改 undefined 而 Chrome FireFox 不能 12/05 09:18
12F:→ mchen11:只是我在想 一般應該都會用 if(!b){b=123} 這樣子的話 12/05 09:21
13F:→ mchen11:改 undefined 不曉得還有什麼重大影響 12/05 09:22
14F:→ gpmm:!b 在 false/0/undefined 都吃,undefined 有自己單獨的情境 12/05 11:42
15F:推 mrbigmouth:如果都用typeof檢查undefined當然沒影響 12/06 09:38
16F:→ mrbigmouth:但jQuery內部用的是 === undefined這種檢查法 12/06 09:38
17F:→ mrbigmouth:所以jQuery當然有必要確保undefined不被改 12/06 09:38
18F:→ mrbigmouth:jQuery還必須兼容各家瀏覽器 12/06 09:39
19F:→ mrbigmouth:至於jQuery為啥用=== undefined的檢查法...我猜可能在 12/06 09:40
20F:→ mrbigmouth:某些瀏覽器的效率會有差(吧?) 12/06 09:40
21F:→ mchen11:我覺得樓上m大解釋的很有道理 少用一個 typeof 的檢查動作 12/06 17:53
22F:→ mchen11:的確執行得比較有效率(少一個動作) 12/06 17:57
23F:推 s25g5d4:jQuery不是用closure包起來了 undefined應該不會被影響吧 12/06 21:31