购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 比较运算符

JavaScript提供了关系运算符来比较值的关系,表4-3列出了常见的关系运算符。

表4-3 常见的关系运算符

4.3.1 大于运算符和小于运算符

大于运算符“>”和小于运算符“<”这两个符号与数学中的表示法和含义相同,用来比较符号两边值的大小,例如:

关系运算的结果是布尔值,即关系满足结果为true,否则为false。

JavaScript中的“大于或等于”和“小于或等于”符号与数学中的表示法完全不同,在数学中的符号是≥和≤,但在JavaScript中的表示法是>=和<=。例如:

4.3.2 等于运算符和不等于运算符

除了大于运算符和小于运算符,比较运算符还包括两类运算符:等于运算符和不等于运算符,等于运算符分为相等运算符“==”和全等运算符“===”,不等于运算符分为不相等运算符“!=”和不全等运算符“!==”。

如果想比较两个值是否相等,则应该使用“==”运算符或“===”运算符。再次强调,JavaScript中的等号“=”表示赋值,而非相等。

“==”运算符只比较运算符两边的值,不比较值的类型。当“==”运算符两边的值的类型不相同时,会先进行隐式转换,再进行比较。我们通常将“==”称作“等于”运算符,比如:

在第一行代码中,运算符两侧为同类型的值,因此直接比较两侧的值,输出结果为true。在第二行代码中,运算符两侧的值的类型分别为数字5和字符串5,当执行时会先进行隐式转换,将字符串5转换为数字5,再比较值,输出结果为true。

“===”运算符不仅比较两边的值是否相同,而且比较类型是否相同,称作“全等于”运算符。比如:

在第一行代码中,运算符两侧为同类型的值,因此直接进行比较,输出结果为true。在第二行代码中,运算符两侧为不同类型的值,因为“全等于”运算符不仅比较值,而且比较值的类型,所以输出结果为false。

布尔型值在和数字类型值进行“==”运算的时候,true会隐式转换为1,false会隐式转换为0。

如果上面的测试全部改为“===”运算符,则表示类型也被比较,结果均是false。

读者可能会疑惑,null==undefined的结果是什么?

经过验证,此段代码返回的结果为true。尽管null和undefined的语义和场景完全不同,但ECMAScript规范认为null和undefined的行为很相似,都表示一个无效值,并且它们表示的内容也具有相似性,因此对二者进行相等“==”比较时会返回true。这里我们只需记住:null和undefined进行相等“==”比较时,输出结果为true。

在实际开发时,不管遇到什么情况,都应该减少将变量赋值为undefined的操作,因为这样会区分不出变量是未声明的还是未初始化的。如果将变量赋值为null含义就完全不一样,当我们定义一个变量时,若其具体数据还没有确定,一般就将变量初始化为null。

0和空字符串在同null和undefined判等时也会返回false,比如:

特殊值的判等仅在面试题中会出现,在实际开发中出现的概率不大,读者只需要记住上述规律即可。

运算符“!=”是运算符“==”的反义,称作“不相等”运算符。不相等运算符“!=”同样遵循相等运算符“==”的使用规则。比如:

代码中的5!="5"在执行时将字符串5转换为数字5,此时5不等于5不成立,输出结果为false。

运算符“!==”是运算符“===”的反义。比如:

代码中的5!=="5"在执行时先对运算符两侧的值进行判断,因为一侧为数值类型,一侧为字符串类型,所以不会对字符串5进行隐式转换,直接输出结果true。 pMQQl6/FefadIwKOMST61gfpZxiCVkQbkXdyZK6vfThZUx70ArPp1y51/M6zBL23

点击中间区域
呼出菜单
上一章
目录
下一章
×