JS中=、==、===的区别

JS中的=、==、===是不同的

“=”表示赋值,

把后面的值赋给前面

var a=1  // 赋值

“==”相等运算符,

宽松的比较两个数据,如果两个数据类型相同,就直接比较,如果两个数据类型不同,则会先转化数据类型相同,再比较

  • 原始类型间的比较
// 原始类型的数据会转换成数值类型再比较

1 == true // true
// 等同于 1 === 1

0 == false // true
// 等同于 0 === 0

2 == true // false
// 等同于 2 === 1

2 == false // false
// 等同于 2 === 0

'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1

'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0

'' == false  // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0

'1' == true  // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1

'\n  123  \t' == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格
  • 对象与原始类型比较
// 对象与原始类型的值比较时,对象转化成原始类型的值,再进行比较。

[1] == 1 // true
// 等同于 Number([1]) == 1

[1] == '1' // true
// 等同于 String([1]) == Number('1')

[1] == true // true
// 等同于 Number([1]) == Number(true)
  • undefined 和 null
false == null // false
false == undefined // false

0 == null // false
0 == undefined // false
// undefined 和 null与其他类型的值比较时,结果都为false

undefined == null // true
undefined 和 null 比较时,结果为 true

“===” 严格相等运算符

严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false

  • 不同类型的值
1 === "1" // false
true === "true" // false
// 不同类型的值直接返回 false
  • 同一类的原始类型值
1 === 0x1 // true
// 十进制和十六进制的 1 ,是相同的值,同一类型
  • 同一类的复合类型值
    两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
{} === {} // false
[] === [] // false
(function (){} === function (){}) // false
// 严格相等运算比较的是,它们是否引用同一个内存地址
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 标签: 我的笔记 ---学习资料:http://javascript.ruanyifeng.com/ 1. 导论 ...
    暗夜的怒吼阅读 843评论 0 1
  • 1.0-基础部分 pragma mark:输出常量和变量 你可以用print(_:separator:termin...
    037e3257fa3b阅读 933评论 2 7
  • 你印象中的城市是怎样的呢?熙来攘往的人群,像潮水;高架曲折蜿蜒、四通八达,各种的交通路线像蜘蛛网一样覆盖到城市每个...
    探笔LH阅读 475评论 0 0
  • 1、每天可以很开心的大笑一次 2、希望自己可以去接受妈妈经常性的责骂 3、自己所学的育儿知识可以得到老公的肯定 4...
    颖火虫1阅读 298评论 0 0