即时通讯具有简单的if语句,我想验证返回是否具有默认值, 如果是把它放在某个变量上,对我来说它看起来有点难看(使用该语句两次),有更短/更好的方式在JS中编写它?
if (this._oIn._mMet[sM].returns.defVal) {
var defValue = this._oIn._mMet[sM].returns.defVal;
答案 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;
}