Javascript 不同的用法!在if语句中

Javascript 不同的用法!在if语句中,javascript,Javascript,我想知道使用有什么区别如下所示: if (!a === b) { //code here } if (a !== b) { //code here } 或者像这样: if (!a === b) { //code here } if (a !== b) { //code here } 有人能详细说明一下吗?是否存在性能差异?我见过人们同时使用这两种方法,我想知道哪种方法更好。谢谢。!a将管理a的值 如果包含任何falsy值,则!a结果true否则反之亦然,然后检查是否与b if (!a =

我想知道使用
有什么区别如下所示:

if (!a === b) {
//code here
}
if (a !== b) {
//code here
}
或者像这样:

if (!a === b) {
//code here
}
if (a !== b) {
//code here
}

有人能详细说明一下吗?是否存在性能差异?我见过人们同时使用这两种方法,我想知道哪种方法更好。谢谢。

!a
将管理a的值 如果包含任何
falsy
值,则
!a
结果
true
否则反之亦然,然后检查是否与
b

if (!a === b) {
  //code here
}
这里,当
a
不等于
b
时,代码块运行

if (a !== b) {
//code here
}

让我们考虑两种情况,假设a= false,b= true

(!a==b)
=>
!(false)===true
=>
true===true
=>相等,因此代码块运行

(a!==b)
=>
错误!==true
=>相等,以便代码块运行

但是当a=false和b=false时

(!a==b)
=>
!(false)===false
=>
true===false
=>不相等,因此代码块
不会运行

(a!==b)
=>
错误!==false
=>不相等,因此代码块
不会运行

就性能而言,几乎没有区别

const a=true,
b=正确;
const firstStart=performance.now();
如果(!a==b){
//代码在这里
}
const firstEnd=performance.now();
console.log(firstEnd-firstStart);
const secondStart=performance.now();
如果(a!==b){
//代码在这里
}
const secondEnd=performance.now();

console.log(secondEnd-secondStart)“a不等于b”与“a不等于b”我相信
!a
将左侧转换为布尔值,然后对b
执行相等性检查<代码>a!==b
是a到b的反向相等检查。第一个基本上是说“如果a是falsy,false等于b”,而第二个则是说“如果a不等于b”“有任何性能差异吗?”这是应用程序的瓶颈吗?如果否,停止过早的微观优化。@Rojo首先,存在语义差异。第二,微观基准测试这很可能会产生非常不可靠的结果。只有当你对布尔型进行测试时,“两者的结果是相同的”。如果数据类型不同,则不一定相同<代码>!空===false
false
但是
null!==false
true
。这两个操作不相等。
!空===false
结果到
false
null!==false
true
您错误地切换了结果。是的,我只是在重新阅读并编辑了推荐后才意识到这一点。