从一道js笔试题到==运算符的简析
时间:2010-05-05
来源:互联网
引用:
<SCRIPT LANGUAGE="JavaScript">var a = 0;
var b = -1;
var c = 1;
function assert (aVar) {
if (aVar==true) alert(true);
else alert(false);
}
assert(a) ;
assert(b) ;
assert(c) ;
</SCRIPT>
提示:您可以先修改部分代码再运行
可是这道题的正确输出为:false false true。
(-1==true)的值为false。
再来看下面这个例子:
引用:
<SCRIPT LANGUAGE="JavaScript">var a = 0;
var b = -1;
var c = 1;
function assert (aVar) {
if (aVar) alert(true);
else alert(false);
}
assert(a) ;
assert(b) ;
assert(c) ;
</SCRIPT>
提示:您可以先修改部分代码再运行
在这里,我们发现,if(aVar) 和 if(aVar == true)的结果并不相同。
cssrain在答案中的解释是:
引用:
if(aVar) 和 if (aVar==true) 对负数有截然不同的答案。提示:您可以先修改部分代码再运行
提示:您可以先修改部分代码再运行
看看ECMA-262(第80页)中怎么说的:
引用:
6.If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.7.If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
进一步看下面这个例子:
引用:
<SCRIPT LANGUAGE="JavaScript">var a = "undefined";
var b = "false";
var c = "";
function assert (aVar) {
if (aVar==true) alert(true);
else alert(false);
}
assert(a);
assert(b);
assert(c);
</SCRIPT>
提示:您可以先修改部分代码再运行
下面将if(aVar==true)改为if(aVar)。
提示:您可以先修改部分代码再运行
最后还有一个例子,解释当==两边为字符串和数字时的比较规律。
提示:您可以先修改部分代码再运行
因为true先被转换为1了。然后参考ECMA的规则:
引用:
4.If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).5.If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
[ 本帖最后由 afc163 于 2010-5-5 14:51 编辑 ]
作者: afc163 发布时间: 2010-05-05
大凡数据比较 都是低级变高级,简单的变复杂的进行比较,比如 整形和浮点型。
而boolean与整形比较时,估计是因为boolean较低级的原因(猜测)。
以前还真没注意过这方面的问题,感谢楼主。。。。
作者: yf1983321 发布时间: 2010-05-05
作者: 3235183 发布时间: 2010-05-05

作者: 泥巴巴 发布时间: 2010-05-05
作者: redky 发布时间: 2010-05-05
作者: EraIT 发布时间: 2010-05-05
作者: nba2008 发布时间: 2010-05-05
作者: gevilhost 发布时间: 2010-05-05
不过我要说的是。
我个人觉得在写程序的时候不能这样写。
我们明明知道两个数据类型不一样。还要用==来比较。说明是自己范了错误。
而非其他原因。
作者: idche 发布时间: 2010-05-06
所谓语言 也就是按照一定规则 而执行的
如果 运行 结果出忽意料 不是语言本身的问题 而是如何安排的问题
作者: 暗翼飘雪 发布时间: 2010-05-06
作者: bmcsy 发布时间: 2010-05-06
作者: atrl 发布时间: 2010-05-10
2. 数字和字符串比较时,先将字符串转化为Number类型,再比较
ps: 快捷获取布尔值, !!-1 == true
提示:您可以先修改部分代码再运行
作者: colinivy 发布时间: 2010-05-10
作者: radioplayer 发布时间: 2010-05-10
作者: sky94yu 发布时间: 2010-05-10
作者: skybot 发布时间: 2010-05-10
作者: alibaba963 发布时间: 2010-05-24
作者: EvenChen 发布时间: 2010-05-24
有时候这些东西很容易就想当然,但却没能把握住其本质,基础还需加强啊
作者: mchunt 发布时间: 2010-05-29
如果一个运算数是布尔值,那么需要转化为数字 t:1 f:0
代码:
<SCRIPT LANGUAGE="JavaScript">var b = -1;
function assert (aVar) {
if (aVar==true) {//这里实际在判断 -1==1 ? 而不是 Boolean(aVer)==true
alert(true);
}else{
alert(false);
}
assert(b) ;
</SCRIPT>
作者: jaoooo 发布时间: 2010-05-31
作者: AyumiHamasaki 发布时间: 2010-06-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28