如果未定义,javascript设置一个variables

我知道我可以testing一个JavaScriptvariables,然后定义它,如果它是未定义的,但没有某种方式说

 var setVariable = localStorage.getItem('value')||  0;

似乎是一个更清晰的方式,我敢肯定,我已经看到了其他语言。

是的,它可以做到这一点,但严格来说,如果检索到的值是falsey ,将会分配默认值,而不是真正的未定义 。 因此它不仅匹配undefined而且还包含nullfalse0NaN"" (但不是 "0" )。

如果你想设置为默认只有当variables是严格undefined那么最安全的方法是写:

 var x = (typeof x === 'undefined') ? def_val : x; 

在新的浏览器上写下来实际上是安全的:

 var x = (x === undefined) ? def_val : x; 

但是请注意,可以在允许声明名为undefined具有定义值的variables的较旧的浏览器上对此进行破坏,从而导致testing失败。

检查typeof而不是undefined似乎更符合逻辑吗? 我假设你期望一个数字,因为你将var设置为0时,未定义:

 var getVariable = localStorage.getItem('value'); var setVariable = (typeof getVariable == 'number') ? getVariable : 0; 

在这种情况下,如果getVariable不是一个数字(string,对象,无论),setVariable设置为0

2017 ES6的答案是:

 return Object.is(x, undefined) ? y : x; 

如果variablesx未定义,则返回variablesy;否则,如果定义了variablesx,则返回variablesx。

var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;

我需要在几个地方“设置一个variables,如果未定义”。 我使用@Alnitak答案创build了一个函数。 希望它可以帮助别人。

 function setDefaultVal(value, defaultValue){ return (value === undefined) ? defaultValue : value; } 

用法:

 hasPoints = setDefaultVal(this.hasPoints, true); 

今天进入这个场景,以及我不希望零被覆盖的几个值。 我们有一个这样的场景的一些常用的实用方法的文件。 以下是我添加的处理scheme,并且灵活。

 function getIfNotSet(value, newValue, overwriteNull, overwriteZero) { if (typeof (value) === 'undefined') { return newValue; } else if (value === null && overwriteNull === true) { return newValue; } else if (value === 0 && overwriteZero === true) { return newValue; } else { return value; } } 

然后可以调用最后两个参数,如果我只想设置未定义的值,或者也覆盖null或0的值。 下面是一个调用它的例子,如果ID是未定义的或者为null,但是不会覆盖0值,则将ID设置为-1。

 data.ID = Util.getIfNotSet(data.ID, -1, true);