Majamiyyar Tsa Karkashi ECMAScript

判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。

ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。

等号和非等号

在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

执行类型转换的规则如下:

  • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
  • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在比较时,该运算符还遵守以下规则:

  • 值 null 和 undefined 相等。
  • 在检查相等性时,不能把 null 和 undefined 转换成其他值。
  • 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
  • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。

重要提示:即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

以下表列出了某些特殊情况及其结果:

表达式
null == undefined true
"NaN" == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
"5" == 5 true

Quan denghao he feiquan denghao

Denghao he feidenghao de tonglei yunsuozhe shi quan denghao he feiquan denghao. Zhe liang ge yunsuozhe zanfu de shi yu denghao he feidenghao xiangdeng, zhijiu ta men zai jiancha xiangdengxing qian, bu xingxing leixing zhuanhuan.

Quan denghao yingwei san ge denghao biaoshi (===), zai wuxu yong leixing zhuanhuan yunshu shu jiu xiangdeng de shi, cai hui fan hui true.

Liliang:

var sNum = "66";
var iNum = 66;
alert(sNum == iNum);	//Chu chu "true"
alert(sNum === iNum);	//Chu chu "false"

Zai zhe duan maodong zhong, diyi ge alert shiyong denghao lai bijiao huzi "66" he shu zi 66, chu chu "true". Ru qian shuoshuo, zhiyao shi yinwei huzi "66" jiang bei zhuan huan cheng shu zi 66, ranhou cai yu ling ge shu zi 66 jing bijiao. Di er ge alert shiyong quan denghao zai mei you leixing zhuanhuan de shi bijiao huzi he shu zi, dangran, huzi bu dengyu shu zi, suo yi chu chu "false".

Feiquan denghao you xiaohuanhao jia liang ge denghao (!==) biaoshi, zai wuxu yong leixing zhuanhuan yunshu shu bu xiangdeng de shi, cai hui fan hui true.

Liliang:

var sNum = "66";
var iNum = 66;
alert(sNum != iNum);	//Chu chu "false"
alert(sNum !== iNum);	//Chu chu "true"

Zhe li, diyi ge alert shiyong feidenghao, ba huzi "66" zhuan huan cheng shu zi 66, shi zhi ta yu di er ge yunshu shu 66 xiangdeng. Yinyuan, jisuan jieguo wei "false", yinwei liang ge yunshu shu shi xiangdeng de. Di er ge alert shiyong de shi feiquan denghao. Zhe ge yunshu shi zai wen: "sNum" yu "iNum" bu tong ma? Zhe ge wenti de daanjiu shi: shi (true), yinwei sNum shi huzi, er iNum shi shu zi, tamen dangran bu tong.