论坛首页 Web前端技术论坛

JSI Side 代码风格与规范

浏览 7750 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-30  
hax 写道
csf178 写道
事实上 delete window.xyz什么都做不了 哪种都没法删掉

有些时候window.xyz用来动态声明全局变量 不过有JSI的话当然就不需要了


delete window.xyz 是可以删掉的。问题是IE删不掉。因为在IE中window对象和所有DOM对象一样,无法用delete。

yes 就是指IE
0 请登录后投票
   发表时间:2008-04-30  
s79 写道
hax兄,能吧。我刚还测试来的。
IE5.5/IE6/IE7/FF2/Opera9/Safari3都测了。公司要求这六种浏览器……


把这个代码贴到地址栏里测试吧:

javascript:try{alert(delete window.xyz)}catch(e){alert(e)}
0 请登录后投票
   发表时间:2008-04-30  
哦,惭愧,刚才没测试window.test
var test="test";alert(delete test);//false
test="test";alert(delete test);//true
test="test";alert(delete window.test);//IE出错
window.test="test";alert(delete test);//IE出错
window.test="test";alert(delete window.test);//IE出错
看来IE对var、无var、window.的处理是分三种……
0 请登录后投票
   发表时间:2008-04-30  
  delete  t delete window.t
t="test" 成功 Exception
var t="test" 无效 Exception
window.t="test" Exception Exception

 

tmd 刚才没测 t="test" - -!

0 请登录后投票
   发表时间:2008-04-30  
以上是IE5.5/IE6/IE7会出现的情况,在FF2/Opera9/Safari3里,除了var t="test",delete window.t返回false外,都返回true。
听说出IE8了还没试啥样呢。
0 请登录后投票
   发表时间:2008-04-30  
原来delete还有如此多的说法

我最初犯的一个错误式,误以为delete式删除变量的,后来发现,delete只是用来删除属性,纠正下来以为万事大吉了,没想到还有这样没完没了,呵呵

谢谢各位的精彩补充
0 请登录后投票
   发表时间:2008-04-30  
s79 写道
以上是IE5.5/IE6/IE7会出现的情况,在FF2/Opera9/Safari3里,除了var t="test",delete window.t返回false外,都返回true。
听说出IE8了还没试啥样呢。

忘标注了 这个测试结果是ie8的ie7模式的结果
0 请登录后投票
   发表时间:2008-05-01  
jindw 写道


    * 杜绝变量悬空现象




    不要出现:



    if (!window.Element){

        var Element = new Object();

    }

    改成:


    var Element = window.Element || new Object();



    这段代码来自大名鼎鼎的Prototype,这里没错,但是如果被拷贝到某个函数内,问题就大了,有此类问题的脚本,放在JSI中装载,也会存在问题。



我觉得都非常不错,但这个我觉得用逻辑运算符并没有用if那么明了,当然我觉得上面的代码或许改为:

var Element = window.Element;

if (!Element){

   Element = new Object();

}

还有一点,不知道应不应该定义一下私有变量和函数的命名规则,比如用 __temp 或者 __temp__ 来命名呢?
0 请登录后投票
   发表时间:2008-05-01  
补充一点,因为js变量没有作用域,所以可以参考pythone的标记方法
_var_
__var__
虽然比较难看,但是能够分清变量的作用域,避免泄漏
0 请登录后投票
   发表时间:2008-05-01  
trydofor 写道
补充一点,因为js变量没有作用域,所以可以参考pythone的标记方法
_var_
__var__
虽然比较难看,但是能够分清变量的作用域,避免泄漏

js作用域是通过closure控制是没问题的 私有完全可以做到

这种用奇怪名字避免重名的办法千万不要约定 约定的就容易冲突
自己可以规定一下
比如 喜欢钱的可以用这种 $_$var
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics