【译】 --两重相等和三重相等

问题:


JavaScript 有两个视觉上很像,但是很不同的,去测试两个值的不同.你可以使用== 或者===,下面是不同之处


三个等于号


当在 JavaScript 中使用===的时候,我们是想要严格相等,这意味着,两个类型和值都要相等.


让我们看下两个关于严格相等的例子.


5===5//true


在这个例子里,我们比较数字 5 和数字 5,按照我们想的一样,true 返回.两个都是数字,而且两个的值都是 5


'hello world' === 'hello word'


// true(both string ,equal values)


true === true


//true(both booleans,equal values)


太棒了,现在让我们看下一些返回 false 的例子.


在这个例子里面,我们对比数字 77 和字符串 77,这个意思是我们对比的是两个值是相同的,但是类型不同,返回一个 false.


77==='77'//false (number v.string)


下面是两个其它的例子:


'cat' === 'dog'


// false(both are string ,but have different values)


false===0


//false (different type and differnt value)


太棒了,我们验证了,三重(严格)相等的关键是对比的两边都要值和类型都要相等.


两个等号


当在 JavaScript 中使用两个等号我们是进行松散比较.两个等号同样执行类型强制转换.


类型强制转换的意思是两个值只有经过转换成公共类型之后才能进行比较.


一个例子说明这个,前面的时候,我们测试两个不同的值使用三重(严格)相等


77==='77'


//false(number v.string)


77不严格相等于"77",因为它们两个类型不一样,然而,如果我们我们对比他们使用的是松散对比...


77=='77'


//true


你可以看我们得到了一个true,这是因为类型转换,JavaScript 会尝试转换我们两个不同的值变成同一个类型,字符串'77'可以轻松转换成数字 77,所以我们会得到返回一个 true.


让我们看另一个例子.


前面我们我们使用严格对比 如果 false 等于 0:


false


这个明显是 false,然而,如果我们对比这两个使用两重比较


false == 0


//true


居然返回了 true?为什么会这样?这个跟 JavaScript 中的虚值有关.我们会再下一节解释这个概念


虚值


为什么在 JavaScript 中 false == 0 .这是复杂的,因为在 JavaScript 中 0 是一个虚值.


类型强制转换会把 0 转换成一个 false 的布尔值,然后 false 等于 false


下面是六个虚值在 JavaScript 应该记住他们


false - 布尔值的 false


0 - 数字 0


''' - 空字符串


null


undefined


NaN - 不是一个数字


虚值的对比


下面是虚值的规则,如果你是一个 JavaScript 工程师,你应该牢记他们


false, 0 , and ""

当使用两重比较较任何他们三个值的时候,他们总是相等,这是因为他们的值总是被强制转换成 false


false == 0


// true


0==""


//true


"" == false


//true


2 null 和 undefined


当比较 null 和 undefined 的时候,他们总是和相等并和对方相等


null == null


// true


undefined == undefined


// true


null == undefined


// true


如果你尝试比较 null 和其他的值,都会返回 false.


3 NaN


最后,NaN 是不等于任何值,更酷的是,他都不等于他自己


NaN == null // false


NaN == undefined


// false


NaN == NaN


// false


关键点


就像你看到的那样,JavaScript类型转换有点疯狂,除非你很熟系 JavaScript,不然松散比较的价值比不上他出错的价值,记住六个虚值,和他们的规则,可以让你更好的使用两重相等


三重相等(严格相等) 比两重相等的优先级更好,当你可能的时候,你应该尽量使用严格相等,对比值和类型,你可以确定总是执行一个真正的对比.


最后


感谢你的阅读,如果你是阅读到学习 web 开发,查看六个月学会全栈 web 开发指南


我每周写 4 篇文章在 web 开发.如果你想添加收到每周一次的邮件列表,请考虑输入邮箱订阅.喜欢的话可以再 Twitter 上关注我


如果这个文章对你有用的话,点个赞表示你的支持吧


原文链接: https://codeburst.io/javascript-double-equals-vs-triple-equals-61d4ce5a121a

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容