梦想天空

.NET/.NET CF/Mobile Phones HP1937,Siemens M55,Siemens CXV65,Nokia 6021 PDU,SMS,Data Cabel,IrDA,Bluetooth and so on.
数据加载中……
一个“引号”引起的血案!外一则编码引起的超诡异问题
网页变成遇到JavaScript的问题算是够头痛的,特别是对我这种网页开发新手来说,更是雪上加霜。不仅仅是对他的不熟悉,更是调试工具使用的不熟悉,再加上本来就不好调试,一切加起来,困难重重。

今天就遇到了一个超级诡异的问题,在一个JavaScript函数中找不到另一个函数,大体就是这样的

<script type="text/javascript" src="bFun.js"></script>

function A()

{

B()

}

bFun.js这样定义

.....(some functions)

 

B()

{

....

}

...(some functions)

然而执行到B()的时候提示“没有对象”。郁闷啊,B()明明就是定义了的!还有那些地方有错误呢?

后来高手过来帮忙调试,发现在这个之前还有页面的错误,我忽略了,是一处提示没有括号的错误。

第一眼还是没有看出来怎么回事,反复查看以后,发现,原来是掉了一个引号~~~正如下面的样式

...

string str=a+"some text"+ p + OtherText";

就是OtherText前面少了一个引号,造成了解析器误以为OtherText以后的部分都是字符串类型,当然b()在OtherText之后,当然就找不到问题了~~~~

真是诡异。

问题解决之后,才发现,原来,解释性语言那么麻烦~~~还是静态编译的好一些。想想,如果JavaScript有某种语法检测工具那该多好啊~~~或许我还没有发现吧。

 

另外一个诡异的问题来自于同事,程序当中有时候要对字符串进行比较,类似于以下的:

if(step=="步骤")....

当他调试到step的时候,纵使step的值是“步骤”,if都不跳转到应该执行的代码!!

怎么回事呢?

原来这个代码的源代码的编码在vss里面出了问题,checkout之后的编码也不是正常的编码,造成了"步骤"编译以后的二进制值和由其他地方传过来的step的二进制值不相同,而机器比较的时候不是比较字面的,而是直接比较内存中的值,这就造成了异常诡异的BUG。

将源代码重新编辑保存就对了。

看来,第一,在写代码的时候,一些大量常用的字符串,能够放在一个固定的文件里面,所有需要用到的时候都从那儿提取,就会大大减少类似的错误。第二,程序中的字符串如非必要,还是以英文为好。

posted on 2007-08-09 17:44 Dream world 梦想天空 阅读(845) 评论(15)  编辑 收藏

评论

#1楼  2007-08-09 17:52 没剑      

B()

}

bFun.js这样定义

.....(some functions)



b()

{


貌似大小写错了...
    回复  引用  查看    

#2楼  2007-08-09 18:20 LeadNT [未注册用户]


哥哥,就这么一个由于你的粗心大意而引起的小小问题也有必要放blog园的首页上?

我真要吐血了!!!!!!莫非blog园真成第二个水源了??????
    回复  引用  查看    

#3楼  2007-08-09 18:49 周银辉      

建议某些朋友尽量注意园子的形象
    回复  引用  查看    

#4楼  2007-08-09 19:12 Phinecos(洞庭散人)      

是b() 而不是B() ,另外if(step=="步骤")这种代码写的真是弱智,这种文章是不应该放到首页,纯粹骗点击。。。
    回复  引用  查看    

#5楼  2007-08-09 20:05 Winsome [未注册用户]

浪费时间!
    回复  引用  查看    

#6楼 [楼主] 2007-08-09 20:12 Dream world 梦想天空      

以上的朋友,SORRY~
    回复  引用  查看    

#7楼  2007-08-09 22:37 Pharaoh      

js语法检查,稍微花一点时间就不会有问题的。
http://www.cnblogs.com/Pharaoh/archive/2007/07/30/836356.html
    回复  引用  查看    

#8楼 [楼主] 2007-08-10 17:25 Dream world 梦想天空      

@Pharaoh
谢谢,看看
    回复  引用  查看    

#9楼  2007-08-11 04:03 施生移      

Javascript就是这样,一开始,我的理解就是:这是什么垃圾,后来,写多了,就爱上这门语言了,它可以很好的提高用户感受,并且在Ajax中,发挥了很大的作用
    回复  引用  查看    

#10楼  2007-08-11 07:07 ╃小〥斌╄      

用FireBug好了~~ 有时候一个全角空格更郁闷
    回复  引用  查看    

#11楼  2007-08-11 10:09 hesicong      

@╃小〥斌╄
我们开发的项目原生不支持FIREFOX~~所以也没办法用FIREBUG了~
    回复  引用  查看    

#12楼  2007-08-11 13:17 ╃小〥斌╄      

好象记得IE也有个插件的.. 忘记了.. 实在不行也只能慢慢调了 一般我是另建一个文件 然后每个方法单独copy过去看的。.
    回复  引用  查看    

#13楼  2007-08-11 23:25 hesicong      

@╃小〥斌╄
有一个IE Developer Tool和IE WebDeveloper,我都装了,可是我们的页面隐藏了标题栏,所以没办法使用~~~很郁闷
    回复  引用  查看    

#14楼  2007-08-12 10:13 ╃小〥斌╄      

那郁闷了~~ 每次改完代码以后还是跟以前的代码对比下, 有没有误操作 除了VSS 还有2个比较轻量级的 Merg和DF 用下来感觉不错. 脚本语言这方面确实挺弱的. 还是要自己小心..
    回复  引用  查看    

#15楼  2007-08-13 09:58 深蓝      

JS的确在写起来和调试起来比较痛苦.不过如果写惯看惯以后倒觉得非常方便了.
    回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-09 20:11 编辑过
 
向地震灾区捐赠爱心
 
历史上的今天: