我想创建一个函数warn
,它可以作为一个简单的一般错误处理函数,它可以执行以下操作:
NaN
,null
,undefined
,但可以是[]
,''
等)目前,这就是我所拥有的:
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
不是数字(undefined
或NaN
)shouldNotBe
未定义thing
也是NaN
所以我的问题是有更好的方法来解决这个问题吗? NaN
不能通过条件进行测试的事实确实会引发争议。
答案 0 :(得分:1)
您可以将部分isNaN(shouldNotBe) && shouldNotBe != undefined
缩短为Number.isNaN(shouldNotBe)
。您也可以使用Object.is
代替==
,但是您需要null == undefined
和+0 == -0
的特殊情况。