如何在JavaScript中的语句之前理解下划线

时间:2018-11-26 00:43:12

标签: javascript

在此示例代码中_是什么意思

if (_(abc.content).has("abc")){
    console.log("abc found");
}

许多人说“ _”表示私人成员,但是如果abccontent是私人成员,我们是否应该使用_abc.contentabc._content? / p>

谢谢

3 个答案:

答案 0 :(得分:3)

为使其有效,_必须引用 function 。脚本可能使用的是underscore,在这种情况下,_(abc.content).has("abc")返回布尔值-true,如果abc.content对象的 key 为{{1 }},否则为abc

false
const abc = { content: { key1: 'foo', abc: 'bar' } };

if (_(abc.content).has("abc")){
    console.log("abc found");
}

console.log(_(abc.content).has("keyThatDoesNotExist"))

它可能与私有属性无关,因为<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>独立函数。

使用的库也可能是lodash:

_
const abc = { content: { key1: 'foo', abc: 'bar' } };

if (_(abc.content).has("abc")){
    console.log("abc found");
}

console.log(_(abc.content).has("keyThatDoesNotExist"))

但是可以肯定的是,您必须检查<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js"></script>-_,或者查看它的定义位置,以获得一些想法。

答案 1 :(得分:1)

那只是一个变量名。没错,惯例建议下划线指代对象中的私有成员,例如:

const num = 2;

function Multiply(num) {
    this._multiplier = 2;
    this._input = num;

    this.start = function(){
        return this._multiplier * this._input;
    }
}

const product = new Multiply(num).start(); //4

但是私有成员的概念与您的示例无关。

在您的情况下,_()实际上是一个函数;

function _ (){
    return "I love potatoes";
}

一个函数,该函数返回包含.has()方法的对象。您的功能的结构可以简化为类似的

function _(args){
    const content = args;

    return {
       has: function(data){
          //do something
          return true; //some boolean expression
       }
    }
}

答案 2 :(得分:0)

_是JavaScript中的有效变量名,可以按照您想要的任何方式使用,就像i,a,x,长度,时间,日期或您可以想到的任何其他变量名一样。

我个人通常会在函数主体中不使用下划线作为函数参数列表中的变量。

const func = (_) => {
  // _ is not used in the function body
};

const _ = () => { console.log('Hello from underscore!'); };

_();