在 JavaScript 中,与 .get 相当的是什么?

26
d = {'hello':'abc'}
d.get('hello','default_val');
上面的代码是Python。如何在JavaScript中实现?我想能够设置默认值,如果没有找到键(key)的话。

上面的代码是Python。如何在JavaScript中实现?我希望能够在未找到键(key)时设置一个默认值。


尝试使用此处给出的答案进行测试:https://dev59.com/5HE85IYBdhLWcg3wwWMb - Martin Taleski
4个回答

33

您至少有四五个选项:

  1. 在现代环境中,您可能会使用nullish coalescing操作符??):

x = obj.key ?? "default";
如果obj.key的结果为undefinednull,则使用"default"; 如果obj.key结果为任何其他值,则使用该值(包括各种falsy值,如"")。 在不支持??的旧环境中,您可以使用神奇的||运算符
x = obj.key || "default";
如果obj.key结果为任何 falsy 值(包括 ""),则使用 "default";否则,使用该值。在可以的情况下,通常应使用??而不是||,因为它可以更准确地测试“缺失”值。

这已经过时了,??现在已经可以处理此类情况。 对于不能使用||的情况,有in 运算符:

x = "key" in obj ? obj.key : "default";

in可以告诉我们一个对象是否拥有给定键名的属性。需要注意的是,键名是一个字符串(属性名可以是字符串或Symbol类型;如果你使用了Symbol类型,那么你会知道)。所以如果obj.key可能是合法的0,那么你应该使用这个方法而不是上面的#1。

inobj.key会在对象本身和对象的原型链中查找键名。如果你只想检查对象本身而非其原型链,在现代环境中你可以使用Object.hasOwnProperty()

x = Object.hasOwn(obj, "key") ? obj.key : "default";

在过时的环境中没有 hasOwn,你可以使用一个 polyfill,或者使用 hasOwnProperty(但要注意对象可能有自己的版本 hasOwnProperty,它可能不告诉事实):

x = obj.hasOwnProperty("key") ? obj.key : "default";
如果你不想排除null,你可以特别检查undefined:
x = typeof obj.key !== "undefined" ? obj.key : "default";

如果obj没有该属性,或者有该属性但是属性值为undefined,那么它将使用默认值。


哇,我从来不知道这个。其他语言也可以使用吗(尤其是 PHP)?太棒了。 - cutsoy
1
@Tim:我不太了解PHP,无法回答这个问题。在大多数语言中(如C、C++、C#、Java),||只返回truefalse。JavaScript的版本更有趣,更符合“函数式”编程风格。(顺便说一句,&&也有类似的功能:如果左边的东西是“真实”的,则给你右边的东西,否则返回false。) - T.J. Crowder
@TJCrowder,我刚刚测试了一下,在PHP中不起作用:( ...无论如何还是谢谢你=)! - cutsoy
1
@Tim:在PHP中似乎不行,但在Perl和Ruby中可以(链接已提供)。 - mu is too short

5

这可能会误导 - 如果值为假,OR 将触发。 - jsuth

2

0

这个怎么样:

var d = {'hello':'abc'};
var helloVar = d.hello ? d.hello : 'default_val';

就此而言,它的作用与 helloVar = d.hello || 'default_val'; 完全相同。 - T.J. Crowder
是的,虽然 ... || ... 更短更易读。可惜它在其他语言中不起作用,否则它肯定会让我的一天变得更美好 :p! - cutsoy

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