考虑到最佳实践,我们可以使用双一元运算符!用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