第九十八章 比较

在许多时候,我们需要比较两个值的大小,那么这一章来说一说用来比较的符号。

a > b;b < a;

大于号和小于号就不说了,这个和我们数学里是一样的。那么如果是大于等于和小于等于呢?

a >= b;b <= a;

你可以理解为,怎么读的就怎么去写,这样就记住了。

然后还有什么?对,等于,但是我们在数学上用的 = 来表示,而在 JS 里面这是赋值符。

a = 12;

这不是在作比较,而是把后面的值 12 赋值给前面的变量 a,那么这种方法显然是不行的。

在 JS 里比较相等关系用的符号是 ===,叫做全等于,就是两边彻底相等才可以。

这么一说问题就来了,全等于,那就是说有不全等于?

我们前面说两个值参与运算,一般会先转换为相同的类型,再进行运算。而我们刚刚所说的这些都是比较运算符,所以这种转换也是存在的。那么我们来看:

'1' 是字符串,1 是数字,如果它们被转换为相同的类型,无论是都转换为字符串,还是都转换为数字,值都是相等的,这个怎么说?

=== 全等于就要求两边不仅值相等,而且类型相同。这才是完全相等。

== 这是等于,仅要求值相等,类型不一定相同。

所以为我们知道啦,一般用全等于(===),特殊情况下用等于(==)。

比较既然是一个运算,就应该有一个计算结果。这个结果只有两种情况,成立或者不成立。

12 > 5;5 > 12;

两个式子,一个成立,一个不成立,这个很容易理解。当这个式子成立,我们就说这个式子为“真”,不成立则为“假”。诶,这些东西好像初中学过,其中一个十分重要的名词是“真值表”,大家回忆一下。

这里要引出一个重要的数据类型——布尔型(Boolean)。布尔型只有两个值 true 和 false,就是分别表示真假。

console.log(12>5);
比较成立

那么注意 true 和 false 是很特殊的名词,就不能作为变量名了,这叫做保留关键字,系统保留了,不给你们乱用了,就这个意思。像我们前面学的 varconstlet 都是这样的。不过这里它们是两个特殊的值,这一点有点类似于 π。

这些都很简单,因为十分符合我们日常的认知。那我们继续搞事情,如果我们把布尔型转换为数字会是怎样的结果?

console.log(+false);console.log(+true);console.log(0 == false);console.log(1 == true);
转换成数字

那么,true 转换为数字是 1false 转换为数字是 0。下面我们又通过比较验证了这一点。

所以我说数字 1 为真,0 为假,这个应该没有问题。事实上非零的数字都为真,但不是非零的数字都等于(==) true。毕竟 true 和 false 转换为数字只能对应一个值,那么 true 已经对应了 1,就不能再和其他数字乱搞了。而数字从某个角度可以分为两种状态:有、没有。对应真、假两种状态。所以有的状态为真,没有的状态为假。

所以不是零的数字,在状态上为有,则为真。零是没有,则为假。

然后有同学表示要验证一下:

console.log(12 == true);

结果得出答案 false。这是为什么呢?因为计算之前先要统一两边的数据类型,否则没法比较。默认情况下会把布尔型转换为数字,然后进行比较。那其实刚才的式子经过转换就成了:

console.log(12 == 1);

自然是没有办法成立的。但如果把两边都转换为布尔型,则成了:

console.log(true == true);

就是成立的。

这一章的内容有一些是我们日常中没接触过的概念,希望大家细细的读上两遍,自然就理解了。如果还不理解也不用着急,我们后面还有各种验证的方法。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容