关于JS中变量比较相关的一些坑,你了解多少?尤其是坑人的==号的用法,你真的会用吗?js中严格等于===和==的区别和使用上的不同,为何js不推荐使用==进行基本变量的比较

前言

之前我分享过一篇小文,是关于两个空对象做判断的,大概提一下,是这样:

let obj = {}
console.log(obj=={})//这里输出false

是因为对象==比较,比较的是索引值,每个{}的索引值都是不一样的,所以这样的比较永远不可能相等,其实我们在js开发中,经常会遇到字符串、数字、空值等各种各样的比较,这篇文章我们来详细说说,如有欠缺欢迎补充。

一:类型转换

JavaScript的双等号()比较会进行类型转换。这意味着它将尝试将操作数转换为相同的类型,然后再进行比较。这可能导致意外的行为,因此建议使用严格相等运算符(=)。

5 == '5'; // true,因为字符串'5'被转换为数字5
1 == true; // true,因为布尔值true被转换为数字1
0 == false; // true,因为布尔值false被转换为数字0

二:假值

1、JavaScript中的一些值被视为“假值”,它们在双等号比较中被视为相等。

0 == false; // true
'' == false; // true
null == undefined; // true

2、一些其他的特殊判断

(1)空数组(Empty Array):一个空的数组也被视为"假值"。
var emptyArray = [];
if (!emptyArray) {
    console.log('这是一个空数组'); // 这是一个空数组
}
(2)空对象(Empty Object):一个空的对象也被视为"假值"。
var emptyObject = {};
if (!emptyObject) {
    console.log('这是一个空对象'); // 这是一个空对象
}
(3)空函数(Empty Function):一个没有定义内容的函数也被视为"假值"。
function emptyFunction() {}
if (!emptyFunction) {
    console.log('这是一个空函数'); // 这是一个空函数
}
(4)空正则表达式(Empty Regular Expression):一个没有定义正则表达式模式的正则表达式也被视为"假值"。
var emptyRegExp = /()/;
if (!emptyRegExp) {
    console.log('这是一个空正则表达式'); // 这是一个空正则表达式
}

请注意,这些情况都被视为"假值",因此在条件语句中它们将被解释为false。这可以在编程中用于检查变量是否为空或未定义等情况。但要小心,因为这些情况并不总是等同于彼此,它们具有不同的含义和用途,也就是说仅限于在条件语句中使用,不能互相拿来比较相等

三、(重要)空字符串和0的比较:

空字符串(‘’)和0在双等号比较中被视为相等。这个需要格外注意,有时进行一个值是否等于’'但是允许数字的情况,就不能用双等号==进行判断

0 == ''; // true
//再如
let count = 0;
if (count == ''){
	console.log('请输入数量')//会输出这行,这明显不是我们想要的,因为数量是有可能为0的。这里我们应该使用严格等于“===”来比较
}

四、对象比较:

当比较两个对象时,双等号(==)比较的是它们的引用而不是内容。

var obj1 = { name: 'John' };
var obj2 = { name: 'John' };
var obj3 = obj1;

obj1 == obj2; // false,因为它们引用不同的对象
obj1 == obj3; // true,因为它们引用同一个对象

五、显式类型转换:

您可以使用显式类型转换函数将变量转换为特定类型。

var numString = '42';
var num = parseInt(numString); // 将字符串转换为整数
console.log(num); // 42

var boolValue = true;
var boolString = String(boolValue); // 将布尔值转换为字符串
console.log(boolString); // 'true'

六、使用严格相等运算符:

为了避免类型转换带来的不确定性,最好使用严格相等运算符(===)进行变量比较。

5 === '5'; // false,因为它们的类型不同
1 === true; // false,因为它们的类型不同

这些示例展示了不同情况下的变量比较行为,希望有助于更好地理解JavaScript中的类型转换和比较规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值