d = {'hello':'abc'}
d.get('hello','default_val');
上面的代码是Python。如何在JavaScript中实现?我想能够设置默认值,如果没有找到键(key)的话。
上面的代码是Python。如何在JavaScript中实现?我希望能够在未找到键(key)时设置一个默认值。
d = {'hello':'abc'}
d.get('hello','default_val');
上面的代码是Python。如何在JavaScript中实现?我想能够设置默认值,如果没有找到键(key)的话。
上面的代码是Python。如何在JavaScript中实现?我希望能够在未找到键(key)时设置一个默认值。
您至少有四五个选项:
在现代环境中,您可能会使用nullish coalescing操作符(??
):
x = obj.key ?? "default";
如果obj.key
的结果为undefined
或null
,则使用"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。
in
和obj.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
,那么它将使用默认值。
||
只返回true
或false
。JavaScript的版本更有趣,更符合“函数式”编程风格。(顺便说一句,&&
也有类似的功能:如果左边的东西是“真实”的,则给你右边的东西,否则返回false
。) - T.J. Crowder这个怎么样:
var d = {'hello':'abc'};
var helloVar = d.hello ? d.hello : 'default_val';
helloVar = d.hello || 'default_val';
完全相同。 - T.J. Crowder... || ...
更短更易读。可惜它在其他语言中不起作用,否则它肯定会让我的一天变得更美好 :p! - cutsoy