Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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,我知道Boolean()、String()和Number()转换,以及'+…,和+…转换方法 我想知道是否有任何理由不使用函数构造函数?可能只是使用更少的字符,使脚本更紧凑。我可以想到7: B o o l e a n 通常使用通常是不受欢迎的,因为以前没有见过它的人不清楚它的实际用途是什么。也就是说,它不到Boolean()字符的三分之一 此外,我不确定您在Javascript中实际需要转换为布尔值的频率,因为它通常是隐式转换的,因为Javascript是弱类型的。将new运算符与这些函数构造函

我知道Boolean()、String()和Number()转换,以及
'+…
+…
转换方法


我想知道是否有任何理由不使用函数构造函数?

可能只是使用更少的字符,使脚本更紧凑。

我可以想到7:

  • B
  • o
  • o
  • l
  • e
  • a
  • n

  • 通常使用
    通常是不受欢迎的,因为以前没有见过它的人不清楚它的实际用途是什么。也就是说,它不到
    Boolean()
    字符的三分之一


    此外,我不确定您在Javascript中实际需要转换为布尔值的频率,因为它通常是隐式转换的,因为Javascript是弱类型的。

    new
    运算符与这些函数构造函数一起使用可能会对
    typeof
    运算符产生不可靠的影响。(编辑:正如注释正确指出的那样,这仅在使用
    new Boolean()
    而不是
    Boolean()
    时发生)

    比如说,

    var f = new Boolean(true);
    if(typeof(f)==="boolean") {//false, since its an object, not boolean
     ....
    }
    

    有一些很好的例子

    我发现对这些类型使用
    new
    会导致容易混淆或棘手的错误:

    var x = new Boolean(true);
    console.log( x ); // true
    console.log( typeof x ); // "object"
    
    var y = new Boolean('false');
    console.log( y ); // true
    console.log( typeof y ); // "object"
    
    var z = false;
    console.log( z ); // false
    console.log( typeof z ); // "boolean"
    
    这不应该是一个问题,但是有人可以用他们自己的函数替换
    布尔值
    函数,使这两种方法不等价。例如:

    Boolean = function(x) {
        alert('Evil');
        return !x; // Oops
    }
    
    var x = 0;
    console.log(!!x); // false
    console.log(Boolean(x)); // true
    
    这主要是一个理论上的差异,因为您不应该替换内置构造函数,但这是一个差异


    由于名称查找和函数调用开销的原因,性能也可能存在微小差异。但在大多数情况下,我不会担心这两个问题。只需使用您喜欢的版本。

    和其他都是无意的语法糖。我更喜欢构造函数方法,因为它更具可读性。如果你通过一个压缩器/缩微器来运行它,它可以将它转换成更丑陋、更紧凑的版本。
    在我看来是完全可读的。我更喜欢那些快捷方式。不,两种方法产生相同的结果。@Travis:老实说,这是个坏例子。那个看起来很难看,因为那只是四个难看的标记。另外,您只需删除第一个中的空格。我的意思是,例如,
    !!someVariable
    非常紧凑和漂亮。
    和其他语言也可以使用,比如PHP,顺便说一句。如果没有
    new
    关键字,它也可以正常工作
    typeof Boolean(1)==“Boolean”
    。OP指的是
    Boolean()
    ,而不是
    new Boolean()
    。这是两件不同的事情。另外,
    new
    是一个运算符,而不是构造函数。@Sime Vidas已修复,并添加了一个说明,说明它不适用于未使用
    new
    的情况。谢谢老实说,如果有人对JavaScript不太熟悉,不知道“!!”是什么意思,我不太确定我是否希望有人弄乱我的代码。:-)@尖刻的是,我认为可能有很多优秀的程序员没有接触过
    在JS中使用,大多数情况下是在C/C++中使用的。就我个人而言,作为一名业余程序员,我已经见过很多次了。不过,我明白你的意思。我猜是否使用
    取决于人们必须遵守的代码准则。我对此不是百分之百认真的,但我确实认为即使是不熟悉JavaScript的优秀程序员也应该真正研究它,因为有很多地雷——特别是对于长期以来以这种方式看待世界的Java或C程序员来说……@primvdb:当然@我同意,JavaScript肯定会让很多不熟悉语言的人(<代码> = /<代码> VS >代码>===/COD>,隐式<>代码>;<代码> >等,尤其是如果他们认为它只是一个浏览器脚本语言的话。它还返回正确的
    typeof
    结果。
    typeof(新布尔值(false))==“object”
    ,而
    typeof false==“Boolean”
    。我认为隐式版本因此不那么不透明。我想这是一个偏好的问题。