这么多人邀请我,而且 @蒙奇D撸码客 在回答中 at 了我,那我就挑挑这段代码的问题吧。
从代码逻辑看,这段代码的意思是:
变量 notice 记录的是公告的个数(正整数,和零??),保持在了 cookie 里。
cookie() 返回的结果是字符串(?),也就是说 notice 变量是一个数字字符串。
+hideNotice 把字符串转换为数字。
!+hideNotice 逻辑非运算,当数字为 0 或者 NaN 时返回 true。
就如这个变量名 hideNotice 所示,用来表示是否隐藏公告。
由于我们不知道 cookie() 函数的实现,所以当 cookie 里面没有 notice 时,返回什么?undefined?null?false?""?……
好在这几个结果都返回 true
!+undefined
!+null
!+false
!+""所以,从这段代码来看,!+hideNotice 的意思是判断 hideNotice 是否为 '0'。
但是,离开这段代码后,!+str 并不能正确的判断字符串 str 是否为 '0'。
当 str 不为数字时,!+str 返回 true。
还有就是 +str 的结果为 0 时,str 并不一定必须是 '0',也可能是 0 的各种变体:
+'+0'
+'-0'
+'.0'
+'-.0'
+'0e0'
+'0x0'
+'0o0'
+'0b0'
后面加个好萌啊,将来还可能会有:+'0n'。