Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
考虑到最佳实践,我们可以使用双一元运算符!用JavaScript?_Javascript - Fatal编程技术网

考虑到最佳实践,我们可以使用双一元运算符!用JavaScript?

考虑到最佳实践,我们可以使用双一元运算符!用JavaScript?,javascript,Javascript,为了我对一元的理解运算符执行隐式类型转换,有时用于类型转换 所以基本上是运算符将其操作数转换为布尔值并求反 现在: 事实上: !!'true' === Boolean('true') // true 所以我假设两者都是!!x和布尔值(x)执行相同的操作 我想知道: 你知道任何让我的假设错误的警告吗 就良好实践而言,应首选哪种方式 您知道不同ECMAScript版本或浏览器供应商之间有什么区别吗 你的假设是正确的。这就是它的工作原理,我 不知道在使用时需要特别小心 说到良好的实践,你可能会有

为了我对一元
的理解运算符执行隐式类型转换,有时用于类型转换

所以基本上是
运算符将其操作数转换为布尔值并求反

现在:

事实上:

!!'true' === Boolean('true') // true
所以我假设两者都是
!!x
布尔值(x)
执行相同的操作

我想知道:

  • 你知道任何让我的假设错误的警告吗
  • 就良好实践而言,应首选哪种方式
  • 您知道不同ECMAScript版本或浏览器供应商之间有什么区别吗
      • 你的假设是正确的。这就是它的工作原理,我 不知道在使用时需要特别小心

      • 说到良好的实践,你可能会有同样多的人 支持快速“脏”
        有谁会这么做
        提倡使用
        布尔
        函数;然而,根据我的经验,似乎
        在库代码中更常见(查看jQuery源代码, 你有很多类似的东西。IMHO,它是足够可识别的,可以在不降低代码可读性的情况下使用

      • 很长一段时间以来,这在ECMAScript中都是标准的;我不能支持旧版本的IE浏览器(在IE 8之前),但你可以相信所有现代浏览器在这种情况下都会有相同的行为

      本标准中的有用参考:

      你知道任何让我的假设错误的警告吗

      你的假设是正确的。
      布尔函数和
      具有相同的功能

      就良好实践而言,应首选哪种方式

      我建议使用一元运算符两次,因为它至少比使用100000次迭代的布尔运算符快两倍

      JS fiddle链接:

      您知道不同ECMAScript之间有什么区别吗 版本或浏览器供应商


      布尔运算符和一元运算符是从JavaScript 1.0实现的,因此它们应该在所有支持JavaScript的浏览器中都可用。

      为什么一直将其称为一元运算符?有二进制文件吗!接线员?@BoltClock谢谢你的评论,谢谢我的理解!是一元运算符。我在JavaScript中找到了这个参考:权威指南,第6版。IMO这不重要。在这种情况下,它们是相同的。我更喜欢双重否定运算符
      因为它的输入更少。砰砰,你就完了。但是有人会说,
      Boolean()false'==true
      ,因为据我所知,值不是
      ''
      的字符串总是true@Anand这与“不使用它是不一样的”<代码>VARK='hey you';console.log(k==!!k)将打印“false”。这是关于类型的,重点是根据操作数的内容获取布尔值,可以是从数字到任意对象的任意值。谢谢您的评论。。。。你能修改一下你的答案吗?即使是相关的,我也不确定它是否具体回答了我的问题。我也不确定你关于“布尔意志会把它当作一个表达式而不是一个值”的观点是否是相关的:“BooLoANE()简单地将它的参数转换成一个原始布尔值并返回那个值。”正如JavaScript中提到的:权威指南,第六版。根据我的理解,表达式被求值为一个值,以便由Boolean()处理,例如:Boolean((function(){return'false';})();也请考虑在19.3.1.1阅读ECMA-262规范。其中只有value被称为Boolean…Boolean(value)@GibboK的参数,表达式不是一个类型,这意味着它将在某个点上进行计算。另一方面,boolean是一种使用true或false的类型。@GibboK,我将修改您问题的答案
      !!'true' === Boolean('true') // true