摘要:例如两个引用类型判断两者之间的引用路径。布尔值与数字比较时,布尔值转化成数字值,二者再进行比较。根据运算符的优先级,先执行,直接转化为布尔值空字符串,,,都是,其余都是再取反,故转化为。最后,故结果为。
两个操作数之间的 " == " 与 " === "
1、 两个不同的基本数据类型: 如果两个基本数据类型(Number、String、Boolean、Null、Undefined)不同,会将它们进行数据类型转化,再进行比较。例如:
0 == "" // true 0 == "0" // true 1 == "1" // true "0" == "" // false false == 0 // true false == "0" // true false == "false" // false false == null // false true == null // false false == undefined // false true == undefined // false null == undefined // true NaN == NaN // false 0 === "" // false 0 === "0" // false 1 === "1" // false false === "0" // false null === undefined // false [] == false // true ![] == false // true ![] == [] // true ![] === [] // false null === document.getElementById("ABC") // true(document.getElementById("ABC") 不存在)
2、 基本数据类型与引用数据类型: 将引用数据类型(function、object,其中object包含array)转化(后台自动调用 Object.prototype.valueOf() )为它的原始值,再进行比较。例如:
[1,2] == "0" // true function(){return ["1,2"]}() == "1,2" // true [1,2] === "0" // false function(){return ["1,2"]}() === "1,2" // false
3、 两个引用类型: 判断两者之间的引用路径。例如:
[1,2] == [1,2] // false [1,2] === [1,2] // false总结
1、" == " 情况
一般转化规则:(对象 => 字符串 => 数字值) 或 (布尔值 => 数字值)
(1)字符串与数字比较时,字符串转化成数字值,二者再进行比较。
(2)布尔值与数字比较时,布尔值转化成数字值,二者再进行比较。
(3)字符串与布尔值比较时,二者全部转化成数字值再进行比较。
(4)对象与数字比较时,对象先转化成字符串,然后再转化成数字值,与数字值进行比较。
(5)对象与字符串比较时,对象转化成字符串,然后二者再进行比较。
(6)对象和布尔值比较时,对象先转化成字符串,然后再转化成数字值,布尔值直接转化为数字,二者再进行比较。
(7)null 与 undefined 二者相等,不能把二者转化为其他值,二者与其他值比较返回 false。
(8)![] == []。(根据运算符的优先级,! 先执行,直接转化为布尔值(空字符串,NaN,0,null,undefined 都是 fasle,其余都是 true)再取反,故![] 转化为 false。其余依照以上规则转化。最后 0 == 0,故结果为 true。)
2、" === " 情况
(1)两个值类型不同,就返回 fasle 。
(2)两个值都是数值,并且是同一个值,那么为 true,另外:如果其中至少一个是NaN,那么为 fasle。(判断一个值是否是 NaN,只能使用 isNaN() 来判断);
(3)两个值都是字符串,每个位置的字符都一样,那么 true,否则 fasle。
(4)两个值都引用同一个对象或函数,那么为true;否则 fasle。
(5)两个值都是 true 或 fasle,那么 true,否则 fasle。
(6)两个值都是null 或 undefined,那么为true;否则 fasle。
结论:推荐使用 “===”, 只要类型不一致,直接返回 fasle;“==” 会造成类型转换再进行比较, 不严谨。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/106318.html
摘要:是全局对象的一个属性,当声明了一个变量而未初始化时,得到的就是。作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点。表示缺少值,此处应该有值,但未定义。因此和的值相等而类型不相等。数字运算不相同这是由于约定的不同所决定的。 对于undefined和null我一直知道他们有很多区别,也知道一点关于他们的区别,但却不具体系统,因此总结了一下,主要心得如下: 我们要区分它们,首先...
摘要:前端工作面试问题备注本包含了一些前端面试问题用于考查候选者。不建议对单个候选者问及每个问题那需要好几个小时。列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。选择器字符串,字符串,回调函数,元素,对象,数组,元素数组,对象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:前端工作面试问题备注本包含了一些前端面试问题用于考查候选者。不建议对单个候选者问及每个问题那需要好几个小时。列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。选择器字符串,字符串,回调函数,元素,对象,数组,元素数组,对象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:前端工作面试问题备注本包含了一些前端面试问题用于考查候选者。不建议对单个候选者问及每个问题那需要好几个小时。列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。选择器字符串,字符串,回调函数,元素,对象,数组,元素数组,对象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:示例下方提供了一个数组,如果我们想将其中的每一个元素翻倍,我们可以使用和来达到目的。注意,是不会返回有意义的值的。允许更改原始数组的元素。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件等众多知名用户的认可。 译者按: 惯用Haskell的我更爱map。 原文: JavaScript — Map vs. ForEach - What’s the difference bet...
摘要:目前,和基本是同义的,只有一些细微的差别。表示没有对象,即该处不应该有值。作为对象原型链的终点。五新增持续更新中一般是意外情况产生的,则是有意为对象赋值来说明这是一个空的对象的返回值是的类型是 摘自阮一峰博客,另附自己的理解分析。 大多数计算机语言,有且仅有一个表示无的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。有点奇怪的是,J...
阅读 1429·2021-11-22 14:44
阅读 2798·2021-11-16 11:44
阅读 3182·2021-10-13 09:40
阅读 1932·2021-10-08 10:04
阅读 2313·2021-09-24 10:28
阅读 2878·2021-09-06 15:02
阅读 2903·2019-08-30 15:52
阅读 2357·2019-08-30 13:20