一些你可能不了解且有趣的JavaScript运算符列表

1_hLSiwh3HW9Pqw0M3gLEMOg.png


在JavaScript中,有许多好用且有趣的运算符。一些运算符会使你的代码看起来更简单。

感叹号(!)-逻辑非

有一些逻辑运算符可用于更方便地检查某些值。其中,感叹号for Logical Not非常有用。它将真实或虚假的值转换为布尔值,但是此运算符切换该值的评估布尔值。

如果该值为true或true,则!value为false或false,反之亦然。
!1 // false
!-1 // false
!0 // true
!function() {} // false
!{} // false
!'' // true
!NaN // true
!null // true
!undefined // true

双重感叹号(!!)-双重逻辑非

这将显式强制将一个值转换为相应的布尔值。这与在已转换为布尔值的!value上加上一个感叹号(!)相同。
!!true // true
!!{} // true
!!(new Boolean(false)) // true
!!false // false
!!'' // false
!!Boolean(false) // false
有趣的是!! Boolean(false)和!!(new Boolean(false))给了我们一个不同的结果。如果不带new调用布尔构造函数,则它会返回一个布尔值。但是,如果使用new调用,它将返回Boolean的实例对象。所以!! Boolean(false)等于!! false,但是!!(new Boolean(false))等于!!(Boolean的实例),就像!! Object。

双星号(**)-求幂

这与Math.pow(x,y)完全相同,后者等于x ^ y。你们中的许多人可能仅在需要时才使用Math.pow。该运算符将使代码更漂亮!

要记住的一件事是IE不支持exponentiation(**)运算符。
 
2 ** 3 === Math.pow(2, 3) // 8
-(2 ** 2) === -Math.pow(2, 2) // -4
10 ** -1 === Math.pow(10, -1) // 0.1

波浪号(〜)—按位非

代字号(〜)是电脑键盘上数字1旁边的花键,它是JavaScript中的运算符,用于处理位。JavaScript(以及其他编程语言)在处理数字时会使用位。如果你不知道两个的补数,请查看Wikipedia中的文章,以了解JavaScript如何对负数起作用。
9 (base 10) = 00000000000000000000000000001001 (base 2)
--------------------------------
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)

该公式实际上非常简单。如果整数是K,则〜K变为-(K +1)。
〜9 =>-((9 +1)=> -10〜
-10 =>-(-10 +1)=> 9
Double Tilde(~~)— Math.floor和Math.trunc

 正如 !!从真假到真,从假真到假,双波浪号(~~)也将浮点数变成整数。单个波浪号(〜)对于数字不是按位的。最重要的一点是,从正变为负,或从负变为正。由于只有一个波浪号,所以我们只需增加一个波浪号即可将其恢复为原始符号号。但是,一旦将波浪号放在数字的开头,则小数点(。)右侧的浮点数将被忽略。
~5.5 => -6
~-6 => 5
~~5.5 === Math.floor(5.5) // true
~~-5.5 === Math.trunc(-5.5) // true


而且根据stackoverflow,这比Math.floor。当数字为负数时,Math.trunc将是适合你的数字。

使用toString的双倍句号

你对将十进制数字转换为二进制数字有什么了解?toString是将十进制更改为二进制的典型方法。它的常见用法可能是Number.toString。但是,也可以如下所示。
5..toString(2)//'101'Number(
5).toString(2)=== 5..toString(2)// true

IIFE与运算符

你如何用JavaScript编写IIFE(立即调用函数表达式)?最常见的方式可能是这样。
(function() {
// do your work
})();

但是,还有其他立即运行函数的方法,尽管并不常见。
const msg = ;

+function(){
msg.push('Hello');
}()

-function() {
msg.push('World');
}()

~function(){
msg.push('!');
}()

~~function() {
msg.push('My name');
}()

!function() {
msg.push('is');
}()

!!function() {
msg.push('Moon');
}()

console.log(msg.join(' ')); // Hello World ! My name is Moon

你注意到这是如何工作的吗?主键是在其右侧放置一个运行操作数的运算符。例如,!5返回false。为什么?因为!计算5并确定!5应该为true,因为它是真实性值。这样,任何运行和评估操作数的运算符都可以运行后面的函数,因为还必须为其运算符运行和评估函数,例如!!或〜。

结论

当然,并不是所有这些在现实中都被广泛使用。但是有时你可能需要它们。其中一些可确保更快的速度和更好的性能。那么,为什么不考虑有一天使用它们呢?

翻译:web前端
英文:https://medium.com/better-programming/a-list-of-interesting-operators-in-javascript-22fdacfbbce9


扫一扫,在手机阅读、分享本文

0
分享 2020-05-20

0 个评论

要回复文章请先登录注册