JavaScript 中 == 和 === 运算符的区别


JavaScript 广泛用于创建交互式网页。它有许多框架,例如 React JS、Angular JS、Node JS 等。像任何其他编程语言一样,JavaScript 也提供算术运算符、关系运算符、比较运算符等。等号运算符,即“==”,就是一个这样的比较运算符,它检查 LHS 是否等于 RHS。此运算符存在于所有其他编程语言中,但在 JavaScript 中略有不同。这是因为 JavaScript 是一种弱类型语言,而所有其他语言都是强类型语言。由于 JS 是弱类型的,它不会比较给定的两个变量的类型。这可以用强制转换的概念来解释。

JavaScript 中的强制类型转换

让我们考虑一下,我们需要添加两个变量“x”和“y”,它们的值分别为 2 和 3。我们将得到 5 作为输出。但是如果我们将“x”与一个字符串相加呢?让我们假设我们将变量“x”与一个空字符串“ ”相加。

为了执行操作,两个值都应该是相同类型的。因此,当我们运行它时,JavaScript 将这两个值都视为字符串并连接它们。这种考虑取决于所使用的运算符的类型。

如果我们对两个数字执行减法运算,其中一个是字符串类型,那么它不会将它们连接起来。它从另一个数字中减去一个数字。因此,我们可以说 JavaScript 根据所执行的操作隐式转换数据类型。这称为强制类型转换。

现在,让我们将此概念应用于双等号 (==) 运算符。考虑两个变量“x”和“y”,它们的值都是 3,但“x”变量中的“3”是字符串类型。

x = "3"
y = 3

假设我们比较“x”和“y”,即“x == y”。由于一个是字符串类型,另一个是数字类型,我们期望输出为false,就像在所有其他编程语言中一样。但在 JavaScript 中,我们得到“true”。

这是因为 JavaScript 中的双等号 (==) 不考虑类型,并使用强制转换的概念将其中一个数据类型转换为另一个数据类型,然后执行操作。但并非总是建议隐式转换数据类型。

为了克服这个问题,我们使用三等号 (===) 代替双等号。三等号运算符是强类型运算符,它考虑两个变量的数据类型以便比较它们。

如果我们使用三等号来比较“x === y”,那么我们将得到结果“false”。建议始终使用三等号运算符,因为它会给出正确的输出。

现在让我们来看几个例子,以便更好地理解这个概念:

示例 1

如果我们比较两个相同的字符串,那么双等号和三等号都会输出 true。

str1 = "example"
str2 = "example"
str1 == str2   	// True
str1 === str2   	// True 

示例 2

如果我们比较字符串和数字,双等号和三等号都会输出 false。

str1 = "example"
str2 = 3 
str1 == str2   	// False
str1 === str2   	// False

示例 3

如果我们比较两个相同的数字,其中一个是字符串类型,那么双等号 (==) 输出 true,而三等号 (===) 输出 false。

str1 = "7"
str2 = 7
str1 == str2   // True
str1 === str2   // False

示例 4

让我们取两个变量var1var2,前者将“8”存储为字符串,后者值为 7。如果我们减去这两个变量并将其与 1 进行比较,则双等号和三等号都会输出 true。当我们执行减法时,字符串值会被 JavaScript 隐式转换为数字类型。因此,结果的类型变为数字,两者都输出 true。

var1 = "8"
var2 = 7
y = var1 – var2
y==1   	// True
y === 1   	// True 

示例 5

如果我们将零与 false 进行比较,双等号 (==) 返回 true,而三等号 (===) 返回 false。

0 == False   	// True
0 === False   	// False

这是因为“0”和 false 的值相同,即 false。因此,双等号会隐式转换其中一个。而对于三等号,“0”是数字类型,false 是布尔类型。因此,它输出 false。

区别:JavaScript 中的双等号 (==) 和三等号 (===)

下表重点介绍了 JavaScript 中双等号 (==) 和三等号 (===) 的主要区别:

特性

双等号 (==)

三等号 (===)

功能

双等号 (==) 只比较两个变量的值,而不比较它们的数据类型。

三等号 (===) 检查两个变量的值和数据类型。

强制类型转换

它遵循强制类型转换的概念。

它不遵循强制类型转换的概念。

类型转换

它隐式转换类型以执行操作。

它不会转换它们原来的数据类型。

弱类型或强类型

它是弱类型的。

它是强类型的。

结论

双等号和三等号是 JavaScript 中的比较运算符,用于比较给定的两个变量或值是否相等。双等号 (==) 运算符是弱类型的,因此它只比较值。相反,三等号 (===) 运算符是强类型的,因此它会考虑它们的数据类型以及值。

更新于:2023年6月23日

8K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告