【问题标题】:Shorthand to avoid falsy 0 value避免虚假 0 值的速记
【发布时间】:2017-04-07 00:16:11
【问题描述】:

我有一个服务器响应,它像这样发回一个对象:

{
 success: integer
}

在客户端,我有

return body && body.success;

问题是整数可能为零,在这种情况下,上面将返回body 而不是body.success

我可以用来始终返回值的最佳速记是什么?

【问题讨论】:

  • 无论如何都会返回数值。 “在这种情况下,上面将返回 body.success 而不是 body.success[0]。” --- 这不是真的。
  • @plalx 抱歉我没听懂你说的
  • "在这种情况下,上面将返回 body 而不是 body.success。" --- 它仍然不是真的。化妆前有没有试过?
  • body 永远不会是结果,除非 bodyfalsey - 在问题的原始版本中,即使是空数组也是真实的,所以原始版本总是会导致success[0]
  • 这个问题应该被关闭,错误的前提,对不起所有

标签: javascript json node.js


【解决方案1】:

您应该始终在后端初始化您的属性。我会设置为“-1”。

function ajaxCall() { 
  return { success: true, id: 10 }; 
  //return null; 
}

function GetData() {
  var myData = ajaxCall();

  if (typeof myData === "undefined" 
  || myData == null 
  || typeof myData.success === "undefined" 
  || myData.success == null) {
    return { success: false, id: 0 };
  } 

  return myData;
}

var body = GetData();

// init
(function(){
 document.getElementById("MyMessage").innerHTML = ((body.success) ? "Success - " + body.id : "Failed") ;
})();
<div id="MyMessage"></div>

【讨论】:

    【解决方案2】:

    这行得通吗:

    return body && (typeof body.success !== "undefined" ? body.success : false);
    

    括号可能不正确,但这应该检查是否定义了正文?如果是这样,是否定义了 body.success?如果不返回正文。

    如果定义了body.success,则返回body.success。如果不是,则返回正文。

    可以这样写:

    If (body)
        return (typeof body.success !== "undefined" ? body.success : body);
    else return false; 
    

    【讨论】:

    • 注意,问题要求the best shorthand - 虽然您的代码在技术上是正确的,但最好的速记是return body && body.success; - 但是,您现在正在对其进行编辑以使其成为速记和冗余
    • 更多typeof检查类型检查之神!
    猜你喜欢
    • 2012-05-22
    • 2015-07-01
    • 2013-01-09
    • 2021-11-29
    • 2020-05-10
    • 2014-05-11
    • 2011-06-15
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多