相关疑难解决方法(0)

是什么 !!(不是)JavaScript中的运算符?

我看到一些代码似乎使用了一个我无法识别的运算符,以两个感叹号的形式出现,如下所示:!!.有人可以告诉我这个运营商的作用吗?

我看到这个的背景是,

this.vertical = vertical !== undefined ? !!vertical : this.vertical;
Run Code Online (Sandbox Code Playgroud)

javascript operators

2906
推荐指数
32
解决办法
51万
查看次数

为什么是 "!!" 在Perl中被认为是不好的形式?

在最近的求职面试过程中,我提交了一些使用所谓的"秘密" !! 操作符的 Perl代码示例.后来,在讨论代码时,其中一位采访者问我为什么选择使用它,并表示它被认为是不好的形式.他没有详细说明原因.

我的团队和我一直使用这个运营商多年,没有意识到它被认为是"糟糕的形式".

"砰砰"操作员是否有副作用或其他意外行为?为什么它或者可能被某些人认为是"糟糕的形式"?有没有惯用的选择?

以下是我认为!!可以接受和/或需要的几个例子.

  1. 编码练习中的实际代码,这是添加布尔值的一个例子:

    while (my $line = <$F>) {
        # snip
        exists $counts{lines} and $counts{lines} += !! chomp $line;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用布尔值作为散列键(显然是简化示例):

    sub foo {
        my ($input) = @_;
        my %responses = ( '' => "False", 1 => "True" );
        return $responses{ !! $input };
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在按位运算中使用布尔值,甚至pack():

    sub foo {
        my ( $a, $b, $c ) = @_;
        my $result = !!$a + (!! $b)<<1 + (!! $c)<<2;
        return $result;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 您需要进行类型转换以供外部库/进程使用,例如数据库,它只考虑某些值是真实的: …

perl boolean type-conversion

58
推荐指数
4
解决办法
4600
查看次数

什么是"+ !!" 用JavaScript做什么?

请考虑以下代码

var value = 0;
for (var i=0; i < arguments.length; i++) {
    value += +!!arguments[i];
}
Run Code Online (Sandbox Code Playgroud)

+!!这里到底做了什么?它是JavaScript中的一种好的编程风格吗?

javascript

4
推荐指数
2
解决办法
80
查看次数

标签 统计

javascript ×2

boolean ×1

operators ×1

perl ×1

type-conversion ×1