从函数早返回:null,显式未定义,隐式未定义?

时间:2018-09-30 18:17:53

标签: javascript html performance

var input = document.getElementById("input").value;

function sendRequest {
  if (Validate.isNumber(input)) {
    input.focus();
    return;
  }

  // or

  if (Validate.isNumber(input)) {
    input.focus();
    return null;
  }

  // or

  if (Validate.isNumber(input)) {
    return input.focus();
  }

  // start Ajax call
  var xhttp = new XMLHttpRequest();
  ...
}

以上3个函数具有相同的结果(如果验证失败终止函数执行)...那么有什么区别?哪个更好?

1 个答案:

答案 0 :(得分:0)

EsLint有一个很好的规则:consistent-return

  

要求return语句必须始终或从不指定值。如果   函数中的任何代码路径都显式返回值,但是一些代码   路径未明确返回值,可能是输入错误,   尤其是在大型功能中

Airbnb JavaScript Style Guide

// No implicit return with side effects
function foo(callback) {
  const val = callback();
  if (val === true) {
    // Do something if callback returns true
  }
}

那么,我们应该什么都不回报呢?

  

在JavaScript中,undefined表示已声明变量,但具有   尚未分配值。

     

null是一个分配值。可以将其分配给变量作为   没有价值的体现。

null vs undefined

TLDR return null

PS 还查看了Null object pattern。如果成功路径返回Promise,那么负路径可以return Promise.resolve(null)-如果该函数的使用者已经检查了Promise内部的值,则不在乎为什么它为空。