本节书摘来自异步社区《javascript精粹(修订版)》一书中的第1章,第1.11节,作者:【英】edwards, j. , 【澳】adams, c.著,更多章节内容可以访问云栖社区“异步社区”公众号查看
当打开firefox中的javascript控制台时就会发现显示警告和错误的选项。警告会提示您使用了旧的语法,或者用了与ecmascript标准不一致的方法等,不过这不一定造成错误1。
例如,下面代码中的fruits变量被定义了两次:
文件:strict-warnings.js (excerpt)
应该忽略第二个var,因为var被用来声明第一次使用的变量,而这个声明前面已经做了。图1.4展示了javascript控制台怎样将错误作为警告显示出来。
有几种类型不匹配的编码方式会引发类似的警告。例如:
(1) 重复声明变量,这种情况下会产生“redeclaration of var name”信息,上面已经讲过。
(2)使用未声明的变量,通常会提示“assignment to undeclared variable name”。例如,如果将上面代码的第一行改为fruit = 'mango'; 就会弹出这样的错误。
(3)假定某对象存在,这种假设会造成“reference to undefined property name”这样的警告。例如,一个if(document.getelementbyid)的条件测试语句,其实是假定了getelementbyid这样的方法是一定存在的,但实际上,浏览器中的javascript的自动错误处理能力会将那些不存在的函数转化为一个布尔值false。想实现类似的功能而又不引发警告,可以这样做:
<code>if(typeof document.getelementbyid != 'undefined')</code>
还有一些与函数相关的警告,以及很多其他类型的警告,不过最有趣的是“useless expression”,当在函数中加入一条什么也不干的语句时就能得到这个警告:
警告并不会阻止脚本的运行,不过如果采用更好的编程方式,就可以避免警告的产生。而程序无警告可以带来很多好处,例如,mozilla中的脚本在没有警告的情况下会运行得更快,这个主题在第20章还将继续讨论。
类型转换测试
可以通过测试类型转换的值来判断未定义类型,也可以很完美地判断null值,因为ecmascript标准要求null等同于布尔值false。所以,像前面的例子中一样,我们使用typeof操作符测试未定义类型,也可以像下面例子中那样测试某个元素是否存在,因为getelementbyid遇到不存在的dom元素时会返回null值。