刚才在看《JavaScript 高级程序设计》,一本好书,想认真啃一下。在书中的第37页,谈到Boolean运算符的时候(NOT,AND,OR),有这么一句话:
使用NOT运算符时(!),如果运算数是undefined,发生错误
用多个浏览器,在地址栏里分别输入这样的语句进行测试:
javascript:alert(!a); //IE报错,其余皆不报错
javascript:var a; alert(!a);
除了第二条语句外,无论是IE6,IE8还是 Firefox , Opera, Safari,都返回的是true,于是欣喜若狂,以为书中写的有问题。于是去翻其勘误表,结果发现没有这个错误,so 更加的开心。。-_-!!!
开开心心的去把成果告诉同事,结果半分钟左右,人家就来否定我了,这真是悲哀啊。。
同事的测试方法,在html页面里写如下代码:
<head>
<title> test boolean not undefined</title>
</head>
<body>
<script type="text/javascript">
alert(!a);
</script>
</body>
</html>
继续测试:
<head>
<title> test boolean not undefined</title>
</head>
<body>
<script type="text/javascript">
alert(!undefined);
</script>
</body>
</html>
继续测试:
<head>
<title> test boolean not undefined</title>
</head>
<body>
<script type="text/javascript">
var a ;
alert(!a);
</script>
</body>
</html>
测试结果表明,只有第一种情况浏览器报错。。
深感无奈,刚才经同事指点,发现该书中第15页有如下话语:
对未声明过的变量,使用除 typeof 之外的其他运算符的话,会引起错误。因为其他运算符只能用于已声明的变量上。
看不是很懂,打打酱油。