gpt4 book ai didi

JavaScript:针对空类型、null、未定义和 NaN 的警告

转载 作者:行者123 更新时间:2023-12-03 02:31:07 28 4
gpt4 key购买 nike

我想创建一个函数warn,作为一个轻型通用错误处理函数,它执行以下操作:

  • 测试变量是否符合条件(通常是 NaNnullundefined,但也可以是 []'' 等)
  • 如果条件为真(且详细信息已打开),则输出警告
  • 如果条件为真(且 fatal 已开启)则结束函数

目前,这就是我所拥有的:

function warn(thing, thingString, shouldNotBe, fatal, verbose){
// default verbose
if (verbose == undefined) {verbose = true;}
// default fatal
if (verbose == undefined) {verbose = false;}

if (
thing == shouldNotBe || // test for undefined and null
(isNaN(shouldNotBe) && shouldNotBe != undefined && isNaN(thing)) // test for NaN
) {
message = thingString + ' is ' + shouldNotBe

if (fatal) { message = '[FATAL]: ' + message}

if ( verbose ) { console.warn( message ) }

if ( fatal ) { return true }
else { return false }
}
}

这让我可以在代码中执行以下操作:

var myVar
fatal = warn(myVar, 'myVar', undefined, true)
if ( fatal ) {return}

> [Fatal]: myVar is undefined

我面临的问题是JS的NaN:

NaN === NaN ---> (false)
NaN == NaN ---> (false)
isNaN(NaN) ---> (true)
isNaN(undefined) ---> (true)
isNaN(null) ---> (false)

所以我必须有这个丑陋的条件(我可以缩短):

(isNaN(shouldNotBe) && shouldNotBe != undefined && isNaN(thing))

至:

  • 首先测试变量 shouldNotBe 是否不是数字(undefinedNaN)
  • 测试 shouldNotBe 是否未定义
  • 测试thing也是NaN

所以我的问题是有更好的方法来解决这个问题吗? NaN 无法通过条件测试这一事实确实给这个问题带来了麻烦。

最佳答案

您可以将 isNaN(shouldNotBe) && shouldNotBe != undefined 部分缩短为 Number.isNaN(shouldNotBe) 。您也许还可以使用Object.is而不是 ==,但是您需要 null == undefined+0 == -0 的特殊情况。

关于JavaScript:针对空类型、null、未定义和 NaN 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48731218/

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