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
让我们取两个变量var1和var2,前者将“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 中的比较运算符,用于比较给定的两个变量或值是否相等。双等号 (==) 运算符是弱类型的,因此它只比较值。相反,三等号 (===) 运算符是强类型的,因此它会考虑它们的数据类型以及值。