分享

JS中8个比较运算符以及不全等比较时数据类型转换的详解

 云桃桃在努力 2024-05-11 发布于河南
你好,我是云桃桃。
一个希望帮助更多朋友快速入门 WEB 前端的程序媛。
后台回复“前端基础路线”可获取前端基础学习路线
后台回复“前端基础题”可得到前端基础100题汇总,持续更新中
后台回复“1024”可获取20+本精选电子书

前言

在 JavaScript 中,比较运算符是我们经常用到的工具,用于比较两个值之间的关系。

本文将介绍比较运算符的的基本功能和使用方式,注意事项以及非严格时的类型转换,项目中的应用场景。

来一起看看吧。

8 个比较运算符

1. 等于 (==)

==是比较两个值是否相等的操作符,如果两个值相同则返回true,否则返回false。在使用==时,JavaScript 会进行类型转换,尝试将操作数转换为相同的类型再进行比较。

代码如下:

console.log(5 == '5'// true,字符串 '5' 被转换为数字5
console.log(0 == ''// true,空字符串被转换为数字0

2. 不等于 (!=)

!=用于比较两个值是否不相等。与==相对,如果值不相同则返回true

代码如下:

console.log(5 != '5'// false,尽管类型不同,但值相等
console.log(null != undefined// false,null和undefined视为不等,但不进行类型转换

3. 全等于 (===)

===是比较两个值是否全等的操作符,这意味着值和类型都相同才返回true

代码如下:

console.log(5 === '5'// false,因为一个是字符串类型,一个是数字类型
console.log([1] === [1]) // false,即使数组内容相同,但它们是不同的对象实例

4. 不全等 (!==)

!==用于比较两个值是否不全等,即值或类型不同则返回true

代码如下:

console.log('hello' !== 'hello'// false,即使内容相同,但它们是同一个字符串
console.log(null !== undefined// true,null和undefined是不同的类型

5. 大于(>)、小于(<)、大于等于(>=)、小于等于(<=

这些运算符用于比较两个值的大小关系。

  • >:如果左边的值大于右边的值,返回true
  • <:如果左边的值小于右边的值,返回true
  • >=:如果左边的值大于或等于右边的值,返回true
  • <=:如果左边的值小于或等于右边的值,返回true

代码如下:

console.log(10 > 5// true
console.log(10 >= 10// true
console.log(5 < 10// true
console.log(5 <= 5// true

非严格比较的类型转换

非严格比较(使用==)会执行类型转换,尝试将两个操作数转换为相同的类型,然后再进行比较。这种类型转换可能导致一些意想不到的结果,所以,这里单独拎出来具体说,我整理了 5 类情况,来一起看下。

字符串与数字的比较

  • 字符串与数字比较

    console.log('0' == 0// true,字符串 '0' 被转换为数字0
    console.log('' == 0// true,空字符串被转换为数字0
    console.log('1' == true// true,布尔值 true 被转换为数字1
  • 非数字字符串与数字的比较:

    console.log(' ' == 0// true,空格字符串被转换为数字0
    console.log('false' == false// false,字符串 'false' 保持原样,不转换为布尔值
  • 比较包含数字的字符串:

    console.log('123' == 123// true,字符串 '123' 被转换为数字123
    console.log('123abc' == 123// false,字符串 '123abc' 不能转换为数字

布尔值的比较

  • 布尔值与其他类型的比较:

    console.log(true == 1// true,true 被转换为数字1
    console.log(true == '1'// true,字符串 '1' 被转换为数字1
    console.log(false == 0// true,false 被转换为数字0
    console.log(true == 'true'// false,字符串 'true' 不能转换为数字
  • 布尔值与空字符串或 null 的比较:

    console.log(false == ''// true ,false 被转换为空字符串
    console.log(false == null// false,null保持原样,不进行类型转换

null 和 undefined 的比较

console.log(null == undefined// true,null和undefined在非严格比较下视为相等
console.log(null === undefined// false,全等操作符不进行类型转换

对象与基本类型的比较

console.log([1] == 1// true,数组 [1] 被转换为数字1
console.log(['1''2'] == 2// false,数组不能转换为数字2
console.log({} == 0// false,对象不能转换为数字

特殊值的比较

  • 特殊值 NaN 的比较:

    console.log(NaN == NaN// false,NaN与任何值都不相等,包括它自己
    console.log(NaN === NaN// false,全等操作符下同样不认为NaN等于自身
  • 空值与任何值的比较:

    console.log(null == 0// false,null保持原样,不转换为数字
    console.log(null == ''// false,null和空字符串不视为相等
    console.log(null == undefined// true,null和undefined视为相等

Tips:

比较运算符,需要注意的是以下几点:

  • 避免使用==进行比较:由于类型转换可能导致难以追踪的错误,推荐使用===(全等)和!==(不全等)进行比较。
  • 注意字符串与数字的比较:当比较涉及字符串和数字时,字符串会被转换为数字,这可能产生非直观的结果。
  • 注意对象和基本类型的比较:对象与基本类型进行比较时,对象会被转换为基本类型,但这通常不会发生,除非对象具有valueOftoString方法的自定义实现。
  • NaN 的比较:NaN 是唯一不等于任何值的值,包括它自己。使用isNaN()函数来检查一个值是否为 NaN 更合适。

实际应用案例

在实际编程中,正确使用比较运算符非常重要。以下是 4 个使用场景:

1. 用户输入验证

在表单验证中,比较运算符常用于检查用户输入是否满足特定条件。

代码如下:

var userInput = '20'
if (userInput >= '18') {
  console.log('User is of legal age.')
else {
  console.log('User is not of legal age.')
}

2. 购物车价格比较

在电子商务网站中,比较运算符可以用来确定用户是否有资格获得折扣。

代码如下:

var cartTotal = 200
var discountThreshold = 150

if (cartTotal >= discountThreshold) {
  console.log('You qualify for a discount!')
else {
  console.log('Your cart does not qualify for a discount.')
}

3. 等级评定

在教育平台中,比较运算符可以用于根据学生的分数评定等级。

代码如下:

var score = 85

if (score >= 90) {
  console.log('Grade: A')
else if (score >= 80) {
  console.log('Grade: B')
else if (score >= 70) {
  console.log('Grade: C')
else {
  console.log('Grade: F')
}

4. 权限控制系统

在权限控制系统中,比较运算符可以用于验证用户的角色或权限级别。

代码如下:

var userRole = 'admin'
var accessLevel = 2

if (userRole === 'admin' && accessLevel >= 1) {
  console.log('你有管理员权限.')
else if (accessLevel >= 1) {
  console.log('你只有用户权限.')
else {
  console.log('没有权限.')
}

最后

通过本文,你现在应该对 JavaScript 中的比较运算符有了深入的理解。在实际编程中,注意比较运算符的使用细节,可以帮助你编写出更加健壮和可读的代码。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多