Javascript经验谈

此篇文章会不断更新,专门收集开发中容易出错但又很容易避免的问题

1.bool类型判断的问题。

先复习一下哪些类型为真,哪些类型不为真,在javascript中 false、0、nullNaN,或者空字符串(""),都等同于为 false。否则,初始值为 true

看一下我们的代码

 

var flag  = query();

if(flag){}

 

其实以上代码是极易容易出错的。如flag值为"0",程序的本意是与query接口商量好0为假,结果由于返回的是字符串,得到的结果被认为成真,与实际业务不相符。

所以在做真假判断之前,最保险安全的做法就是把flag转换为与query接口商量好的数据类型。

除了这些不小心造成的类型判断错误外,还有一种情景,如ajax请中服务端返回的结果为\r\n,对于这种情况有时很难发现,如果发现服务端返回的值看起来与自己想得到的一样,实际对比起来又不样时,最好先做一个长度测试,或自己写一个工具

方法用来对比字符串。

2.字符串类型操作问题

如果您在mac的safari浏览器上做过applet的交互,就有可能遇见一怪癖的问题,通过applet交互返回的字符串与代码中字符串看起来明明是一样,可是==运算得到结果始终不为真,对于这一问题,我还没有升入的研究过,采取的做法是用返回值创建一个字符串对象如:new String(str),但是这里要注意了,new出来的结果类型是object,不适合与字符串做===运算,不然就始终为假了。

后续会做一个不同平台不同浏览器动态创建applet整理。

3.由PDA发现的问题

场景:一个页面中嵌入两个iframe,两个iframe引用不同服务器的同一个页面a.html,a.html中的大致逻辑为操作父页面的location,改变的它的href属性,这样可以实现一个功能:哪条线路快父页面新跳转到哪条线路上,当然这里还有一个问题,如一个iframe做了top.location.href="xx地址",由于父页面跳转需要一点时间,此时另一个iframe中又做了top.location.href="bb地址",这样相当于第一次选路没有成功,跳转到了比较慢的那条线路。所以需要想点办法,如第一选路top.location.href="xx地址?t=1",另一个iframe再做跳转的时候,判断top.location中是否有t=1这个get参数。

通过分析上述场景,如果您之前在工作中有处理过iframe跨域访问的经验就会知道操作父页面location是会报权限不足的错误信息的,但您是否这知道其实对top.location = "xx",

这样的写操作其它是允许的,只是做读操作不允许(出于安全考虑,不同域页面与页面不允许互相访问)。

那如何解决上述问题呢,其实很简单,在iframe中再动态输出一个iframe(这个iframe的域与最上级的页面的域保持一致就ok了)。

注:pda ie7***是不支持iframe的另附pda的ie版本号不同于pc

posted @ 2010-11-13 16:50  周尚武  阅读(275)  评论(0)    收藏  举报