[問題] undefined 改變值

看板Ajax作者 (mchen11)時間11年前 (2012/12/04 11:18), 編輯推噓3(3020)
留言23則, 8人參與, 最新討論串1/1
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

12/04 11:58, , 1F
可以讓接手你工作的人debug時幹翻吧XDDDD
12/04 11:58, 1F

12/04 12:30, , 2F
XD......(筆記)
12/04 12:30, 2F

12/04 13:35, , 3F
有些回圈會檢查next是不是undefined 你改了 就變無窮回圈
12/04 13:35, 3F

12/04 13:35, , 4F
這是最常見的情形吧
12/04 13:35, 4F

12/04 15:44, , 5F
請問m大 如我文中舉的例子 就算把undefined改了 檢查
12/04 15:44, 5F

12/04 15:44, , 6F
typeof a 還是一樣顯示 undefined 看來不會影響檢查啊?
12/04 15:44, 6F

12/04 17:30, , 7F
有些瀏覽器像Chrome不會讓你改undefined的值
12/04 17:30, 7F

12/04 17:31, , 8F
你可能必須要在比較舊的瀏覽器才試的出來
12/04 17:31, 8F

12/04 21:43, , 9F
if(b==undefined)b=123
12/04 21:43, 9F

12/05 09:17, , 10F
謝謝g大,這個例子很好
12/05 09:17, 10F

12/05 09:18, , 11F
我測過了 IE8 可以改 undefined 而 Chrome FireFox 不能
12/05 09:18, 11F

12/05 09:21, , 12F
只是我在想 一般應該都會用 if(!b){b=123} 這樣子的話
12/05 09:21, 12F

12/05 09:22, , 13F
改 undefined 不曉得還有什麼重大影響
12/05 09:22, 13F

12/05 11:42, , 14F
!b 在 false/0/undefined 都吃,undefined 有自己單獨的情境
12/05 11:42, 14F

12/06 09:38, , 15F
如果都用typeof檢查undefined當然沒影響
12/06 09:38, 15F

12/06 09:38, , 16F
但jQuery內部用的是 === undefined這種檢查法
12/06 09:38, 16F

12/06 09:38, , 17F
所以jQuery當然有必要確保undefined不被改
12/06 09:38, 17F

12/06 09:39, , 18F
jQuery還必須兼容各家瀏覽器
12/06 09:39, 18F

12/06 09:40, , 19F
至於jQuery為啥用=== undefined的檢查法...我猜可能在
12/06 09:40, 19F

12/06 09:40, , 20F
某些瀏覽器的效率會有差(吧?)
12/06 09:40, 20F

12/06 17:53, , 21F
我覺得樓上m大解釋的很有道理 少用一個 typeof 的檢查動作
12/06 17:53, 21F

12/06 17:57, , 22F
的確執行得比較有效率(少一個動作)
12/06 17:57, 22F

12/06 21:31, , 23F
jQuery不是用closure包起來了 undefined應該不會被影響吧
12/06 21:31, 23F
文章代碼(AID): #1GlMkCoc (Ajax)