JavaScript教程:实例解析运算符

默写1028

默写1028

2016-02-20 01:06

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐JavaScript教程:实例解析运算符,无聊中的都看过来。

在cssrain整理的一个 试题集 中有这么一道题:

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

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行] 

按照我的理解,任何非0的数值的布尔值都应该为true。

可是这道题的正确输出为: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

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行] 

运行结果依次为:false,true,true。

在这里,我们发现,if(aVar) 和 if(aVar == true)的结果并不相同。

cssrain在 答案 中的解释是:

if(aVar) 和  if (aVar==true) 对负数有截然不同的答案。

真的是负数的原因吗?看下面这个例子:

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

为什么正数2返回的也是false呢。我们将数字转换为boolean值看看。

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行] 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

这里非0数值的布尔值的确都是true,也就是说所有的问题都集中在2==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).

也就是说,布尔值会被首先转换为数字,然后进行比较。true的数字值为1,false为0。所以2和-1都不能和true相等。

进一步看下面这个例子:

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

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行] 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

按照前面的思路,true会被转换为1,所以三个语句都会返回false。运行一下,发现的确如此。

下面将if(aVar==true)改为if(aVar)。

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

这时的运行结果是true,true,false。因为Boolean("undefined")、Boolean("false")、Boolean("")的结果为true,true,false。非空字符串转换为布尔值true。

最后还有一个例子,解释当==两边为字符串和数字时的比较规律。

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

发现没,这个"001"==true是为true的。

因为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.

字符串要被转换为数字,Number("001")的值也为1,所以结果为true。

展开更多 50%)
分享

猜你喜欢

JavaScript教程:实例解析运算符

Web开发
JavaScript教程:实例解析运算符

JavaScript中new运算符

Web开发
JavaScript中new运算符

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

JavaScript中typeof运算符

Web开发
JavaScript中typeof运算符

Javascript中的||运算符

Web开发
Javascript中的||运算符

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JavaScript中减法运算符

Web开发
JavaScript中减法运算符

C++运算符重载赋值运算符

编程语言 网络编程
C++运算符重载赋值运算符

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

什么是JavaScript框架

什么是JavaScript框架

如何设置才能使Excel公式

如何设置才能使Excel公式
下拉加载更多内容 ↓