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

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

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

现在:

!!x // Same as Boolean(x)

事实上:

!!'true' === Boolean('true') // true

所以我假设!!xBoolean(x)执行相同的操作。

我想知道:

  • 你知道任何警告让我的假设错了吗?
  • 从良好的做法来看,哪种方式应该是首选?
  • 你知道在不同的ECMAScript版本或浏览器厂商之间有什么区别吗?

  • 你的假设是正确的。 这正是它的工作原理,我不知道在使用时需要特别小心。

  • 说到良好的做法,你可能会有尽可能多的人支持快速的“肮脏” !! 有人会主张使用Boolean函数; 然而,从我的经验看来,这!! 在库代码中更常见(查看jQuery源代码,你有很多东西,比如return !!locked; )。 恕我直言,它是足够的识别使用而不降低代码的可读性。

  • 在ECMAScript中这已经是很长时间的标准了; 我不能说老版本的IE浏览器(在IE 8之前),但你几乎可以相信所有现代浏览器在这种情况下的表现都一样。

  • 标准中的有用参考:

  • http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.9
  • http://www.ecma-international.org/ecma-262/5.1/#sec-9.2

  • 你知道任何警告让我的假设错了吗?

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

    从良好的做法来看,哪种方式应该是首选?

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

    JS小提琴链接:https://jsfiddle.net/vj593auw/1/

    你知道在不同的ECMAScript版本或浏览器厂商之间有什么区别吗?

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

    链接地址: http://www.djcxy.com/p/73925.html

    上一篇: Considering best practices, can we use double unary operator ! in JavaScript?

    下一篇: What's the point of the compound comparison operators?