直接抛出问题吧:
1 <html> 2 <head> 3 <script type="text/javascript" language="javascript"> 4 window.onload = fun; 5 function fun(){ 6 if(var n = false){ 7 alert("判断输出正确"); 8 } 9 else { 10 alert("判断输出错误"); 11 } 12 } 13 </script> 14 </head> 15 <body> 16 </body> 17 </html>
当在页面中输入上述代码的时候,程序是不能够运行的,提示的错误是:语法错误。即
1 if(var n = false)
这行代码是有语法错误的。
问题分析:
显然,这里if语句的使用是不符合常规的语法的,使用这样的语句也没有什么意义,这里权当研究之用。
首先要说的是:
if语句后面的小括号里可以是任意的表达式,这是毋庸置疑的,使用的表达式的结果也不一定是Boolean类型,可以使任意的类型,只是当不是Boolean类型的时候,默认调用Boolean()方法进行转换就是了。
对声明语句的分析:
这里小括号里是声明语句,显然不是表达式,JavaScript引擎对声明语句的处理规则是:
创建这个Boolean类型的对象,并创建初始值,然后将这个对象添加到环境变量中。结束。也就是JavaScript引擎会对声明的变量或者函数进行预解析。
所以当执行到需要判断if语句中的表达式的值的时候,就不在执行小括号里的语句,就会导致语法错误了。