Javascript在OR语句

时间:2015-06-13 23:31:42

标签: javascript

所以我有一个看起来像这样的声明

subsetSumArray[i][j]=(subsetSumArray[i-1][j] || subsetSumArray[i-1][j-arr[i]]);

问题是当变量j小于arr [i]时,subsetSumArray [i-1] [j-arr [i]]将返回undefined。如果subsetSumArray未定义,我希望将其视为false。什么是最短的方式来做到这一点。 所以基本上我希望它像这样工作 (一些未定义的变量 || true)===>返回true

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

最短的方法是执行双重否定!!)技巧:

subsetSumArray[i][j]=!!(subsetSumArray[i-1][j] || subsetSumArray[i-1][j-arr[i]]);

请参阅以下代码并运行它:

// empty array
var a = [];
// var[1] is undefined
alert( a[1] );                // undefined
alert(!! a[1] );              // false
alert(a[1] || true);          // true
alert( a[1] || a[2] );        // undefined
alert( !! (a[1] || a[2]) );   // false

答案 1 :(得分:-1)

问题是,||不适用于未定义或未声明的变量,因此您必须使用typeof不在您的情况下但同样,如果尚未定义变量。

subsetSumArray[i][j] = (typeof subsetSumArray[i-1][j] !== 'undefined' ? subsetSumArray[i-1][j] : subsetSumArray[i-1][j - arr[i]]);

那就是说,这种情况下的短线是不可读的:

if (typeof subsetSumArray[i-1][j] !== 'undefined')
    subsetSumArray[i][j] = subsetSumArray[i - 1][j];
else
    subsetSumArray[i][j] = subsetSumArray[i-1][j - arr[i]];

这是有效的,更容易理解发生了什么。您甚至可以删除换行符

如果您从未提及变量或未定义变量,则需要使用typeof

function foo (o) {
    var baz = o.bar || 'hello';
    return baz;
}
foo(); // throws error