有很多javascript成语,可以在类型和类似事物之间进行。
!
可以将任何虚假的东西转换为布尔 true
, !!
可以将任何虚假的东西转换为实际的布尔 false
, +
可以将代表数字代表数字的字符串转换为true
,false
或一个字符串,等等。
是否有类似的东西将undefined
转换为null
?
现在我正在使用三元? :
,但是很难知道我是否缺少有用的技巧。
好吧,让我 fotive 一个例子...
function callback(value) {
return value ? format(value) : null;
}
callback
通过第三方代码调用,有时通过undefined
。
第三方代码可以处理传递的null
,但不能处理undefined
。format()
也是第三方,无法处理undefined
或null
。
javaScript现在支持一个null-coalescing操作员:??
。它可能尚未准备就绪(请咨询支持表),但是与节点或thrasspiler(打字稿,babel等)一起使用肯定是安全的。
PER MDN,
无效的合并运算符(??)是逻辑运算符,当其左侧操作数为null或未定义时返回其右侧操作数,否则返回其左侧操作数。
||
可以提供"默认值"。当左操作数是错误的时值,??
提供了"默认值"。值如果左操作数为null或未定义。您可以使用它来胁迫未定义为null:
// OR operator can coerce 'defined' values
"value" || null; // "value"
0 || null; // null
false || null; // null
"" || null; // null
undefined || null; // null
// The null-coalescing operator will only coerce undefined or null
"value" ?? null; // "value"
0 ?? null; // 0
false ?? null; // false
"" ?? null; // ""
undefined ?? null; // null
一个基于问题的示例:
function mustNotReturnUndefined(mightBeUndefined) { // can return null
// Substitute empty string for null or undefined
let result = processValue(mightBeUndefined ?? "");
// Substitute null for undefined
return result ?? null;
}
undefined || null
-或任何虚假||null-将返回null
这是一个相当古老的问题,我的答案可能有点晚了,但是我决定以下方式:
const valueOrNull = (value = null) => value;
const a = { d: '' };
valueOrNull(a.b?.c) === null; // true
valueOrNull(a.d) === ''; // true
valueOrNull() === null; // true
任何undefined
值都将null
作为默认值;
public static replaceUndefinedWithNull(object: any) {
if (isUndefined(object)) {
return null;
}
return object;
}