不要从JavaScript对象的值中返回null。

11

我正在寻找一种最有效的方法,在值为null时输出空字符串而不是"null"。是否有一种方法可以在不使用条件语句(即if或三元运算符(? :))的情况下实现。

以下为示例代码:

$.each(data, function(index, item) {
  return $("div#SearchResults").append(item.PhoneNumber);
}

item.PhoneNumber is null 时,网页会在 SearchResults div 中渲染一个字符串 "null",但我希望它是< strong>空的。


1
为什么?为什么你想在输出之前避免评估变量呢? - David Thomas
我原以为会有更高效的方式,比如一些内置函数。我很惊讶JavaScript或jQuery中没有这样的函数 :( - Ruslan
好的,||(或)运算符可以实现这个功能,但变量仍然会首先被计算,只是没有显式的 if 或三元运算符。 - David Thomas
1
null 转换为字符串在实现层面上是硬编码为 "null" 的,用户自己的代码无法更改。 - Esailija
4个回答

23
$.each(data, function(index, item) {
  return $("div#SearchResults").append(item.PhoneNumber || "");
}

使用$.trim(让nullundefined意外地转换为空字符串):

$.each(data, function(index, item) {
  return $("div#SearchResults").append($.trim(item.PhoneNumber));
}

由于其不直观且未记录,因此出现了意外情况。


点赞,因为我们在大约相同的时间得出了相同的答案,而且我也不理解为什么会有人踩。 - David Thomas

8

如果你真的决定不使用if或三元运算符来评估变量,那么可以考虑使用||操作符:

$.each(data, function(index, item) {
  return $("div#SearchResults").append(item.PhoneNumber || '');
}

但是,说实话,只需使用条件运算符即可,因为这是它们的本意,并且可以有助于强制执行脚本的执行和输出安全性。


最多我会使用 === null 三元运算符,但不会用 if 语句 :P - Esailija
我同意你的评估方法;但是,无论如何,我仍然会明确地评估变量/返回值,而不是依赖上述方法(尽管它有效,但感觉有点... 不对)。 - David Thomas

1

试试这个,

$.each(data, function(index, item) {
  return $("div#SearchResults").append(item.PhoneNumber?item.PhoneNumber:"");
}

3
有没有一种方法可以在不使用条件语句(即 if 或 ? :)的情况下完成这个任务? - Manse
1
我没有点踩,但问题明确要求避免三元运算符(以及if),尽管它没有被具体指出;因此很容易被忽略。 - David Thomas

-1

没有使用 JQuery:

$.each(data, function(index, item) {
  return $("div#SearchResults").append([item.PhoneNumber].join(''));
}

没有使用jQuery,但它仍然是jQuery? - Tim

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