在调试一个带下拉列表的表单程序时,发现一个问题,这个表单是用dialog来显示的,当第一次打开dialog时,select不能够显示当前选项,而再次打开时能够正确显示了,而且这个问题能够重复。
select 的选项是用ajax加载的,只加载一遍;表单的数据也是用ajax加载,每次打开dialog时都重新加载。通过在js中增加日志输出,发现第一次打开 dialog时,表单数据先加载完成,而select选项后加载完成。这样会导致一个问题,将表单数据中的对应select的值设置到select时,肯 定是无法保存的,因此又增加了一个全局变量来保存表单数据;当加载select数据的ajax调用返回后,取select的当前值,如果没有当前值,则使 用已保存的全局变量中的值,然后重新构造select的option选项。当第一次打开表单对话框时,显示select当前选项为空,js日志输出当前值 为null,实际上应该是有值的。而后来再打开表单对话框时,显示select为正确的值。
仔细检查了代码之后,发现select默认有个选项,其值为null,代码为:<select><option value="null"></option></select>。这就可以解释上面的现象了,js日志输出的null是 字符串null,而不是js那个null对象。将null去掉之后程序就正常了:<select><option value=""></option></select>。
类似的问题也可能发生的Java,因为有时候字 符串String为null,有时候又可能为"null",而输出的结果都一样,很难分辨,容易造成一些潜在的问题。这可以说是Java在设计时的一个问 题,而C/C++似乎就好一些,字符串0指针打印的值为(null),加了小括号这样就能通过输出清楚地分辨出来。
- 源文【JS编程要当心null和"null",尤其是最后一个】最新版,请访问:
http://www.vktone.com/articles/be_careful_of_null_string.html