"==="运算符有什么作用?

9

我曾经遇到过一个运算符 "==="。但是我不记得它是什么,或者我们在哪里使用它,或者是否有这样一种运算符?它的使用场景在哪里?

7个回答

19

在PHP、JavaScript、ECMAScript、ActionScript 3.0以及一些其他类似的动态语言中,有两种相等性检查方式:==(非严格相等)和===(严格相等)。以下是一个示例:

5 == "5"   // yep, these are equal, because "5" becomes 5 when converted to int
5 === "5"  // nope, these have a different type

基本上,每当你使用 == 时,都会有自动类型转换的风险。使用 === 确保值在逻辑上相等且对象类型也相等。


JavaScript和ECMAScript之间有什么区别吗? - xiao 啸
2
@Turtle,是的。ECMAScript 是 JavaScript 现在基于的语言标准化努力(JavaScript 先出现),有许多语言 - 不仅仅是 JavaScript - 源自 ECMAScript 的核心语法,但随后添加了其他元素或结构(例如 ActionScript 3.0)。JavaScript 和 ECMAScript 之间的关键区别在于,JavaScript 是 ECMAScript 在实践中的表现... 即浏览器实际实现 ECMAScript 的方式(例如与标准的偏差、扩展等)。 - Michael Aaron Safyan
1
你在第二个例子中打错了,应该是 5 === "5" 而不是 5 === 5 - Joe D

16

在JavaScript中,== 运算符会进行类型转换,而 "严格相等"运算符===则不会。例如:

"1" == 1; // true
"1" === 1; // false

还有一个对应的严格不等运算符!==


7

它被用于JavaScript、PHP等技术中,可能还有其他我没接触过的技术!它的作用是比较两个对象是否具有相同的对象类型和相同的值。


不仅仅是JS,还有很多其他语言。 - Felix Kling

3

"===" 运算符用于检查值是否相等且类型相同。

示例:

$a === $b    if $a is equal to $b, and they are of the same type.

2

通常它测试两个对象是否相同。即,不是测试它们是否具有相同的值,而是它们是否真的是同一个对象。


1

在Prolog中也是这样,如果我没记错的话。我不确定。 - Tyler

0
在 Ruby 中,三重等号是操作符(隐含地)被 case/when 构造用来确定一个对象是否“属于”某个特定的 case。例如,Ruby 有“范围”对象的概念;1..10 表示“1 到 10 之间的所有值(包括 1 和 10)”。因此,`3 == 1..10' 是错误的,因为 3 是一个数字而 1..10 是一个范围。但是, 3 === 1..10 返回 true,因为 3 在该范围内。
当决定参数属于哪个 case 时,case/when 使用它。所以,
case a
  when (1..10)
    puts "This is a valid rating"
  else
    puts "invalid"
  end

正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接