如何在JS中更好地编写这一行

时间:2014-12-16 07:06:48

标签: javascript jquery

即时通讯具有简单的if语句,我想验证返回是否具有默认值, 如果是把它放在某个变量上,对我来说它看起来有点难看(使用该语句两次),有更短/更好的方式在JS中编写它?

    if (this._oIn._mMet[sM].returns.defVal) {
        var defValue = this._oIn._mMet[sM].returns.defVal;

7 个答案:

答案 0 :(得分:1)

您可以直接指定它,即

var defValue = this._oIn._mMet[sM].returns.defVal;

如果退货具有默认值,那么您将获得' defValue'变量,否则它的值将为null。所以不需要两次使用整个法规。您也可以将变量放入' if condition'。

答案 1 :(得分:1)

试试这个:

var defValue = this._oIn._mMet[sM].returns.defVal || 0;

如果this._oIn._mMet[sM].returns.defVal中有任何内容,则指定它的值或将值设置为0,这在javascript中称为布尔false

0仅在this._oIn._mMet[sM].returns.defVal结果为undefined时分配。

答案 2 :(得分:1)

对我来说没有意义。如果值未定义,那么您应该像这样定义变量:

if(typeof something === 'undefined')
 var something = 'something';

但是在你的情况下,如果存在,则值已经在测试,然后定义变量,所以没有任何意义。所以,你只需在那里使用变量:

var defValue = this._oIn._mMet[sM].returns.defVal;

如果没有这样定义,您也可以检查是否使用:

var defValue = this._oIn._mMet[sM].returns.defVal || 'undefined';

答案 3 :(得分:0)

为什么不只是||呢?

var defValue = this._oIn._mMet[sM].returns.defVal || false; // or whatever alternative you want it to be?

答案 4 :(得分:0)

你可以做到

var defValue = this._oIn._mMet[sM].returns.defVal;
if (defValue) {
     …
} // else { // only if you depend on the `undefined` value:
//     defValue = undefined;
// }

或者,如果if语句中没有代码,则可以执行

var defValue = this._oIn._mMet[sM].returns.defVal || undefined;

或者,如果您希望.defVal未定义为可能的假值(并且您不想测试0"",{{1} },false),只是

null

答案 5 :(得分:0)

一般来说,特别是如果你使用某种函数来获取值,最好将它放在一个局部变量中,然后检查它(继续使用它。请注意可能的值。如果returnValue可以合法地为0,那么你必须检查null和undefined,因为0的计算结果为false。

// some possible expensive operation you only want to do once
var myReturnVal = this._oIn._mMet[sM].returns.defVal;
if (myReturnVal) {
    var defValue = myReturnVal;
    // do more stuff
} else {
   // do other stuff
}

尽管如此,只要该值不是具有自己功能的对象,您无论如何都可以分配它。因为尝试以下内容会破坏你的程序。

// if myREturnValue is undefined/null, this will crash
myReturnVal.doSomething()

答案 6 :(得分:-1)

使if语句更清晰的一种常用方法是将检查本身移动到一个方法,就像这样。这样,您可以在阅读代码时使其更具可读性和可扩展性而不会失去焦点。在我的opionon中,这看起来更好。 (只是想法,不正确的实现,你需要检查null并从getDefaultValue(this)获取正确的值)。

if(returnsDefaultValue(this))
    vardefValue = getDefaultValue(this);


function returnsDefaultValue(self){
    return self._oIn._mMet[sM].returns.defVal ? true : false;
}