“if (condition = value)”是正确的比较语法吗?

3
如果 if((hit.transform != transform) 的意思是 如果 hit.transform 不等于 transform,那么我怎么确定这个语句是正确的呢?if(hit.transform = transform) 似乎不起作用。

谢谢大家的快速和丰富的回答。StackOverflow是最好的! - Electricaln00b
5个回答

8

在判断相等时需要使用两个等号

if (hit.transform == transform)

请注意,这将允许各种隐式转换,因此您应该真正使用三个等号——身份相等或严格相等:
if (hit.transform === transform)

请注意,单个等号是赋值操作。
x = y;

现在x的值为y。
您的陈述。
if(hit.transform = transform)

将 hit.transform 分配给 transform 的值,然后测试该表达式的结果是否“真实”,这个结果将与 hit.transform 的新值相同。


1
此外,=== 不是身份相等。它是严格相等:两个对象可能实际上是不同的对象,但仍然通过严格相等测试。 - user166390
@pst: “这两个对象可能实际上是不同的对象,但仍然通过严格相等测试”。举个例子? - RightSaidFred
@RightSaidFred "a" + "b" === "ab" 好吧,虽然可能不太令人兴奋... - user166390
@RightSaidFred 啊,非常正确。从语义上讲,你是对的。我应该在上面说“值”,这样就安全了;-) 我不太了解ECMAScript ed5,===的行为是否可以受到影响? - user166390
1
@pst:受什么影响?当涉及到对象时,===确实进行身份比较。根据严格相等比较算法的描述:“如果x和y引用同一个对象,则返回true。” - RightSaidFred
显示剩余11条评论

3

根据需求,您可以在 ===== 之间进行选择(否定将分别变为 !=!==)。三个等号符号表示法还将执行类型检查。

尝试在JavaScript控制台中输入以下内容:

1 ==  1    // true
1 === 1    // true

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

编辑: = 是赋值运算符,与上面的比较运算符不同:

a = 1      // 1
a = "1"    // "1"
a = "foo"  // "foo"

当在 if 条件中使用类似于 if(a = "foo") 的语句时,你实际上是将 a 设置为 "foo",然后测试 if("foo")。虽然 "foo" 本身不是布尔条件,但 JavaScript 引擎会将其转换为 true,这就是为什么它仍然有效的原因。
然而,这很可能会引入非常微妙的错误,这些错误可能很难追踪,因此最好避免像这样编程,除非你确实知道自己在做什么。

1
那么,帖子中的 = 是怎么回事?它是什么意思? - user166390
处理 = 的扩展答案 - Bart

2

it's

if(hit.transform == transform) 

2

1
  • != 表示不等于
  • == 表示等于。

因此,你可以这样写:

if (hit.transform == transform) {

你所编写的代码尝试着将hit.transform的值设置为transform

那么 = 运算符是什么,为什么它的工作方式是这样的(在上下文中)? - user166390

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