如果未定义,javascript设置一个variables
我知道我可以testing一个JavaScriptvariables,然后定义它,如果它是未定义的,但没有某种方式说
var setVariable = localStorage.getItem('value')|| 0;
似乎是一个更清晰的方式,我敢肯定,我已经看到了其他语言。
是的,它可以做到这一点,但严格来说,如果检索到的值是falsey ,将会分配默认值,而不是真正的未定义 。 因此它不仅匹配undefined
而且还包含null
, false
, 0
, NaN
, ""
(但不是 "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);