javascript - 从函数中提前返回:null、显式未定义、隐式未定义?
问题描述
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个函数具有相同的结果(如果验证失败结束函数执行)......那么有什么区别?哪一个更好?
解决方案
EsLint 有个很好的规则:consistent-return
要求 return 语句总是或从不指定值。如果函数中的任何代码路径显式返回值,但某些代码路径没有显式返回值,则可能是输入错误,尤其是在大型函数中
// No implicit return with side effects
function foo(callback) {
const val = callback();
if (val === true) {
// Do something if callback returns true
}
}
那么我们应该白白回报什么呢?
在 JavaScript 中,
undefined
表示变量已被声明但尚未被赋值。
null
是赋值。它可以分配给一个变量作为没有值的表示。
TLDR:。return null
_
PS也看看Null object pattern。如果成功路径返回 Promise,则负路径可以return Promise.resolve(null)
- 如果函数的使用者已经检查了 Promise 中的值并且不在乎为什么它为空。
推荐阅读
- android - 尽管发送了正确的授权详细信息,但仍获得未经授权的响应
- java - Spring Boot JMS 监听器 - org.springframework.jms.config.JmsListenerEndpointRegistry.isAutoStartup()Z
- javascript - 如何在javascript中过滤和添加剩余的obj
- javascript - React-Native:使用 panResponder.panHandlers (nativeElement) 获取可拖动对象的 X 和 Y 坐标
- google-cloud-firestore - 从谷歌云功能将数据保存到firestore
- javascript - JavaScript:如果情况未填写,如何附加段落?
- httpclient - 最新版本的jar是否支持旧版本的jar
- java - 数组列表
与数组列表 ? - python - 如何在pytorch中动态索引张量?
- java - 有什么方法可以处理 API 调用返回的“数组响应”