作者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