JavaScript学习笔记——不同类型变量的比较和运算:运算符(==、===、+等)和类型转换(“9“==9)

运算符

JavaScript中的运算符有=====!=!==><+-*/
当两个操作数类型不同时,大部分运算符会自动执行类型转换,统一类型以进行后续操作

+运算符:将数字(或布尔值)转换为字符串

+运算符只要遇到字符串,会执行字符拼接(Concatenation),结果一定为字符串

3+"1"结果为"31"
1+1+"9"+1+1结果为"2911"
true+"love"结果为"truelove"
true+"1"结果为"true1"
true+1+"1"结果为"21"

注意:1+1+"9"+1+1结果为"2911"true+1+"1"结果为"21",因为+结合性从左到右

技巧:用number生成字符串时,无需用numbertoString()方法,而是利用+拼接特性:
var str=num+"";
结果为一个字符串

-*/运算符:将字符串(或布尔值)转化为数字

-*/运算符遇到字符串,认为要执行的是算数运算结果一定为数字

3*"1"结果为3
80/"10"结果为10
"0"-true结果为-1
false-true结果为-1

相等运算符(==)

相等运算符(==)的转换

如果要比较的两个操作数的类型不同,相等运算符(==)尝试将它们转换为相同的类型(尽量转换为数字),再检查它们是否相等

操作数的转换规则
  1. 字符串将被转换为数字
    "99"被转换为99
    "2boys"被转换为NaN
    ""(空字符串)被转换为0

  2. 布尔值被转换为数字
    true被转换为1
    false被转换为0

  3. nullundefined比较,结果为相等(因为它们都表示“没有值”)

"99"==99表达式结果为true
0==""表达式结果为true
true==1表达式结果为true
null==undefined表达式结果为true

><运算符

><运算符也会进行类型转换

"0"<true表达式结果为true

另外,两个字符串可以比较大小:根据字符的unicode进行比较

"mango"<"melon"表达式结果为true(因为a的unicode小于e)
"Mango"<"mango"表达式结果为true(因为M的unicode小于m)

严格相等运算符/等同运算符(===)

相等运算符(==)尝试将不同类型的操作数转换为相同的类型
严格相等运算符(===)不进行类型转换

仅当两个操作数的值和类型都相同===才认为它们相等

在不会引入问题的前提下,自动执行类型转换的==可提供极大的便利
但在复杂网页中,建议只使用===,这让代码更清晰、更安全,避免出现古怪的边界情况

不等运算符(!=!==

类比于=====
!=将操作数类型转换为同一类型后,判断是否不等
!==不转换:遇到两个不同类型的操作数,直接判断为不等

"99"!=99表达式结果为false
"99"!==99表达式结果为true

比较两个对象是否相等

说到对象相等性,可从简单的角度考虑,也可从复杂的角度考虑。


从简单的角度考虑,对象变量指向同一个对象,就认为它们相等;
从复杂的角度考虑,即使两个对象存储的值不同,只要这两个对象的类型相同,就认为它们相等。(但如何判断它们的类型确实相同呢?这个问题很重要,将在以后讨论。)

对象变量存储的是指向对象的引用
通过=====判断两个对象是否相等(此时=====完全等效):
仅当两个对象变量引用(指向)同一个对象,它们才相等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值