在许多时候,我们需要比较两个值的大小,那么这一章来说一说用来比较的符号。
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
是很特殊的名词,就不能作为变量名了,这叫做保留关键字,系统保留了,不给你们乱用了,就这个意思。像我们前面学的 var
、const
、let
都是这样的。不过这里它们是两个特殊的值,这一点有点类似于 π。
这些都很简单,因为十分符合我们日常的认知。那我们继续搞事情,如果我们把布尔型转换为数字会是怎样的结果?
console.log(+false);console.log(+true);console.log(0 == false);console.log(1 == true);
那么,true
转换为数字是 1
,false
转换为数字是 0
。下面我们又通过比较验证了这一点。
所以我说数字 1 为真,0 为假,这个应该没有问题。事实上非零的数字都为真,但不是非零的数字都等于(==
) true
。毕竟 true
和 false
转换为数字只能对应一个值,那么 true
已经对应了 1
,就不能再和其他数字乱搞了。而数字从某个角度可以分为两种状态:有、没有。对应真、假两种状态。所以有的状态为真,没有的状态为假。
所以不是零的数字,在状态上为有,则为真。零是没有,则为假。
然后有同学表示要验证一下:
console.log(12 == true);
结果得出答案 false
。这是为什么呢?因为计算之前先要统一两边的数据类型,否则没法比较。默认情况下会把布尔型转换为数字,然后进行比较。那其实刚才的式子经过转换就成了:
console.log(12 == 1);
自然是没有办法成立的。但如果把两边都转换为布尔型,则成了:
console.log(true == true);
就是成立的。
这一章的内容有一些是我们日常中没接触过的概念,希望大家细细的读上两遍,自然就理解了。如果还不理解也不用着急,我们后面还有各种验证的方法。
暂无评论内容