认识javascript值的比较,包括字符串的比较和不同类型的比较,还有一些特殊值比较的注意事项
树图思维导图提供 javascript值的比较 在线思维导图免费制作,点击“编辑”按钮,可对 javascript值的比较 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:5bce43ee912b587cf46ac88aadf7c8e5
javascript值的比较思维导图模板大纲
所有比较运算符均返回布尔值
字符串是按字符(母)逐个进行比较的
示例
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
比较算法
原理
首先比较两个字符串的首位字符大小。
如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束。
否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较。
重复上述步骤进行比较,直到比较完成某字符串的所有字符为止。
如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的字符串更大。
示例
alert( 'Glow' > 'Glee' ); // true
G 和 G 相等。
l 和 l 相等。
o 比 e 大,算法停止,第一个字符串大于第二个。
字符按Unicode 编码顺序
大小写敏感
a > A
比较方式:先将其转化为数字(number)再判定大小
alert( '2' > 1 ); // true,字符串 '2' 会被转化为数字 2
alert( '01' == 1 ); // true,字符串 '01' 会被转化为数字 1
alert( true == 1 ); // true
alert( false == 0 ); // true
一个有趣的现象
若直接比较两个值,其结果是相等的。
若把两个值转为布尔值,它们可能得出完全相反的结果,即一个是 true,一个是 false。
示例
let a = 0;
alert( Boolean(a) ); // false
let b = "0";
alert( Boolean(b) ); // true
alert(a == b); // true!
严格相等
普通的相等性检查 ==
不能区分出 0 和 false
alert( 0 == false ); // true
无法区分空字符串和 false
alert( '' == false ); // true
严格相等运算符 ===
在进行比较时不会做任何的类型转换
alert( 0 === false ); //false,因为被比较值的数据类型不同
对 null 和 undefined 进行比较
=== 比较
不相等
alert( null === undefined ); //false
== 比较
相等
alert( null == undefined ); //true
注意
数学式 或者 < > <= >= 比较
null/undefined 会被转化为数字
null 被转化为 0
undefined 被转化为 NaN
注意
奇怪的结果:null vs 0
alert( null > 0 ); // (1) false
普通比较符比较
alert( null == 0 ); // (2) false
相等性检查:和普通比较符比较逻辑独立
alert( null >= 0 ); // (3) true
普通比较符比较
进行值的比较时,null 会被转化为数字,因此它被转化为了 0。
特立独行的 undefined
undefined 不应该被与其他值进行比较
alert( undefined > 0 ); //false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
原因
(1) 和 (2) 都返回 false 是因为 undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。
(3) 返回 false 是因为这是一个相等性检查,而 undefined 只与 null 相等,不会与其他值相等。
避免问题
除了严格相等 === 外,其他但凡是有 undefined/null 参与的比较,我们都需要格外小心。
除非你非常清楚自己在做什么,否则永远不要使用 >= > < <= 去比较一个可能为 null/undefined 的变量。对于取值可能是 null/undefined 的变量,请按需要分别检查它的取值情况。
树图思维导图提供 904名中国成年人第三磨牙相关知识、态度、行为和病史的横断面调查 在线思维导图免费制作,点击“编辑”按钮,可对 904名中国成年人第三磨牙相关知识、态度、行为和病史的横断面调查 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:10b9a8a2dd2fb4593f8130ef16c320fc
树图思维导图提供 9.战斗的基督教 在线思维导图免费制作,点击“编辑”按钮,可对 9.战斗的基督教 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:33d168acd0cd9f767f809c7a5df86e3a