gpt4 book ai didi

javascript - 创建一个 javascript "hasValue"util 方法

转载 作者:行者123 更新时间:2023-12-02 15:23:56 29 4
gpt4 key购买 nike

优秀的 javascript 程序员非常了解这个测试:

if (typeof(dummy) != 'undefined' && dummy != null && dummy != '') {
// Do stuffs
}

事实上,这个测试确保虚拟变量有一个值。所以我尝试编写这个函数。我的测试用例是:

hasValue(undefined) => should returns false
hasValue(null) => should returns false
hasValue('') => should returns false
hasValue(' ') => should returns true
hasValue([]) => should returns false
hasValue({}) => should returns false
hasValue(true) => should returns true
hasValue(false) => should returns true
hasValue(0) => should returns true
hasValue(new Date()) => returns false, but should returns true ?

这是函数:

function hasValue (v) {
if (typeof v === 'object') {
for (key in v) {
if (v.hasOwnProperty(key)) {
return true;
}
}
return false;
}
if (v === false) {
return true;
}
if (v === 0) {
return true;
}
return (typeof(v) != 'undefined' && v != null && v != '');
}

有没有人看到什么问题,或者有什么优化,或者也许我忘记了一些案例?

最佳答案

这是一个糟糕的 util 方法。您要将以下决策汇总到一个函数中:

  • 您希望[]表示“用户未选择任何选项,请再次询问”还是“用户未选择任何选项,请继续”?
  • 您希望 {} 表示“没有选项传递给函数”还是 {} 表示“选项未传递给函数;使用默认选项”?
  • 您是否希望 ' ' 成为中间名的有效用户输入,但 '' 无效?
  • 您是否希望 0 成为有效的用户 ID,即使您的数据库返回它表示没有用户 ID?

逻辑与域相关。如果您正在编程,例如用户选项仪表板,您可以实现 UserDashboard.hasValue ,它将为 [] 和其余部分返回 false如上所述,但这是与域相关的逻辑,而不是一些通用的 underscore.js 或 jQuery 或 Node.js 核心模块实用函数。

即便如此,读起来也会很困惑。如果我看到这条线

if(hasValue(v)) {
...
}

我现在必须阅读 hasValue 中的神秘逻辑,以找出错误值、[]{}、以及您允许和禁止的''。如果您只需要检查 v 是否为 null,请编写代码来执行此操作。

有多种语言的方法,例如 isNullOrEmpty,这是一个像您所说的实用方法,只有它的名称​​准确地告诉您它的作用,并且它不会尝试做任何事。它的名称可能比您想象的更详细。这是对的;它必须这样做,否则就很难理解它实际上在做什么。

关于javascript - 创建一个 javascript "hasValue"util 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836594/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com