美文网首页
JavaScript小技巧:!!的使用

JavaScript小技巧:!!的使用

作者: 玩毛线的毛线 | 来源:发表于2017-10-11 15:02 被阅读0次

    今天看Vue.js源代码,其中有一段和enumerable相关的代码,如下所示:

    /**
     * Define a property.
     */
    function def (obj, key, val, enumerable) {
      Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
      });
    }
    

    其中!!enumerable中"!!"是个一个很神奇的小技巧。我们在提供接口给别人用的时候,经常需要别人传入一个布尔类型的参数。然而很多时候,使用接口人的不会老老实实地传入一个布尔值,可能会用0代替false,用一个Object代替true。有时候用户会根本不写这个参数,这时候这个传入的值是undefined(布尔为false)。因此我们需要对这些值进行处理,转化为布尔值。

    我们都知道"!"是取反符号,!true=false,!false=true。但是如果!后面不是一个布尔值的时候,"!"会先把这个值强制转化为布尔类型,然后再进行取反操作,举个例子:

    取反操作

    “!”可以将一个值对应布尔值的取反。但是如果我们知道这个值对应的布尔值呢?只需要在!号前再加一个!,取反的取反就是原来的布尔值,举例如下:

    取反的取反操作

    Vue.js源码在调用这个定义的def函数的时候,基本上只写了前面三个参数,第四个参数没有写(默认为undefined),这是"!!"就可以自动地将undefined转化为false,从而使得enumerable传入的值为布尔类型的值。

    相关文章

      网友评论

          本文标题:JavaScript小技巧:!!的使用

          本文链接:https://www.haomeiwen.com/subject/xxjwyxtx.html