网页变成遇到JavaScript的问题算是够头痛的,特别是对我这种网页开发新手来说,更是雪上加霜。不仅仅是对他的不熟悉,更是调试工具使用的不熟悉,再加上本来就不好调试,一切加起来,困难重重。

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

function A()
{
B()
}
bFun.js这样定义
.....(some functions)

b()
{
....
}
...(some functions)

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

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

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

...
string b=a+"some text"+ p + OtherText";

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

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

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

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

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

怎么回事呢?

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

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

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