双感叹号?[重复]

2020/10/17 04:01 · javascript ·  · 0评论

可能重复:
什么!(不是)JavaScript中的运算符?
什么!运算符(双感叹号)在JavaScript中是什么意思?

因此,我正在调试一些代码,并遇到了以下问题:

var foo.bar = 0; // this is actually passed from another function, adding it for context

function(foo) {
    var someVar = !!foo.bar;

    if (foo.bar) {
      // ..stuff happens
    } else {
      // .. something else happens
    }
}

好的,我的问题是什么!!所有要做的就是制作0 === false

  1. 与之相比,使用它有什么好处boolean(foo.bar)

  2. foo.bar可以按原样进行评估,因为0 === false已经存在,那么为什么要进行转换呢?(someVar不会在其他任何地方重复使用)

这会将值转换为布尔值,并确保为布尔类型

"foo"      // Evaluates to "foo".
!"foo"     // Evaluates to false.
!!"foo"    // Evaluates to true.

如果foo.bar通过,则它可能不是0,而是其他一些伪造的值。请参阅以下真值表:

JavaScript真值表

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
false     ==   undefined     // false
false     ==   null          // false
null      ==   undefined     // true
" \t\r\n" ==   0             // true

资料来源:道格·克罗克福德

当涉及NaN值时,Javascript也变得很奇怪。这是我唯一能想到的!与===的行为会有所不同。

NaN   ===  NaN     //false
!!NaN === !!NaN    //true

// !!NaN is false

我认为答案是没有太多意义。我们可以推测一下它是如何产生的:

  • 可能someVar在多个地方使用了该函数的早期版本,或者以真正拥有了true或的方式受益false,因此这更有意义。
  • 也许编写函数的人已经习惯了!!转换为true/ false,以至于他甚至都没有注意到在这里没有必要。
  • 也许编写该函数的人觉得应该通过给结果分配一些变量来给每个计算(在这种情况下为布尔转换)赋予一个有意义的名称。
  • 可能是因为JavaScript中的布尔转换出乎意料地容易出错(例如,它new Boolean(false)是一个真值),所以编写该函数的人觉得应该总是显式而不是隐式地完成它-即使效果是相同的-只是要引起注意,将其作为潜在的错误点。

    • 当然,这前提是编写该函数的人将其!!视为“显式”布尔转换。从技术上讲,它不是-它使用与之相同的隐式布尔转换if-但是,如果您习惯了这种惯用语,则相当于显式转换。

但根据我的主观意见,这些理由都​​不是很好的理由!

如上所述,它强制使用布尔类型的对象。您可以自己看到:

(function typecheck() {
  var a = "a";
  var b = !a;
  var c = !!a;

  alert("var a = " + typeof(a) + "\n" +
        "var b = " + typeof(b) + "\n" +
        "var c = " + typeof(c));
})();

如果您只是在进行比较,则转换只会在以后为您节省类型强制。

仅供参考,以下值在JavaScript中被强制为FALSE:

  • 0
  • 空值
  • 未定义
本文地址:http://javascript.askforanswer.com/shuanggantanhaozhongfu.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!