JavaScript: 将变量设置为第一个可用值

3

CSS中,你可以设置一个属性,比如font-family,后面跟着一个逗号分隔的列表,第一个被找到的将会被使用。

font-family: Fancy Font, Arial, sans-serif;

在Javascript中,我已经开始习惯使用双竖线逻辑或作为将变量设置为第一个可用值的方法。
var x = parameters.x || user_default.x || 123;

我发现的问题是,||0 评估为 false,从而跳过该值。也许这只是一厢情愿,但是否有一种优雅的类似语法可以使用,而不会导致这些误报?

1
在 JavaScript 中,0undefinednull""false 是假值。 - PSL
我认为你需要使用if语句或三元运算符。 - Tobias
1
请查看此答案:https://dev59.com/J3RB5IYBdhLWcg3w4bOv#476471 - Faust
1
你所说的“第一个可用值”是什么意思?是指第一个为真的值吗?不是 null 吗?不是 undefined 吗? - Mike Christensen
1个回答

4

您不能使用简单的||运算符进行此操作,因为在js中,0是假值(与"", undefined, null和false一起),因此它将无法满足条件。您可以编写一个简单的实用函数,如下所示。

function tryGetValue() {
    var val;
    for (var i = 0, l = arguments.length; i < l; i++) {
        val = arguments[i];
        if (val !== undefined && val !== null) //check only for null & undefined, you can also do if (val != null) which will check for both null and undefined but it will fail in jslint validation.
        return val;
    }
}

使用方法:

var x = tryGetValue(parameters.x, user_default.x , 123);

3
移除 args 并直接引用 arguments。你并没有使用任何数组方法,因此不需要以这种方式“转换”它。 - Niet the Dark Absol
@NiettheDarkAbsol 确实... 谢谢。 - PSL
2
我将这个方法称为default并在我的代码中使用它。唯一的区别是我不检查是否为空,因为null _是_一个值(因为未定义和明确没有什么是不同的)。如果您要检查不仅仅是对象的事物,那么这是更好的方法 :) - Benjamin Gruenbaum
@BenjaminGruenbaum 嗯,对的!但是只是检查以确保 null 在显式设置的情况下存在... 但将其移动为第二个条件更有意义,因为不定义某些内容的可能性较小。 - PSL
我同意Benjamin的观点。如果某个东西是null,那么它是由我设置为null的。undefined是唯一我会跳过的东西,因为没有什么可以使用的。实际上,如果传递给默认值的所有值都未定义,那么我将返回null。非常感谢你们提供的帮助! - Wray Bowling
感觉编辑这个有点好笑,但我还是编辑了。如果我过头了,请纠正我! - Wray Bowling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接