【发布时间】:2013-04-22 04:30:45
【问题描述】:
这将在稍后需要:elementStr = 'hello'。
所以我正在开发一个 javascript 应用程序。在我的一个函数中,我有以下 if 语句:
if (elementStr.indexOf('#') !== 0) {
//true
}
但我不喜欢 !== 部分,我觉得它不好看。所以我尝试了这个:
if (!elementStr.indexOf('#')) {
//false
}
但是 indexOf() 不会返回未定义的但它总是返回一个数字。所以第一个 if 语句返回 true,因为 elementStr 在字符串的第一个位置没有“#”。但是第二个 if 语句返回 false,因为 indexOf 返回 -1 并且这不是“未定义”,但我们当然希望它像第一个示例一样返回 true。因为我们不想改变语句,我们只是想让它看起来更好。所以偶然我这样做了:
if (!~elementStr.indexOf('#')) {
//true
}
你猜怎么着,它奏效了。我试图找到关于那个标志的东西,它在 javascript 中的作用。但我什么也找不到。我正在玩它,我得到了以下结果:
if (!~~elementStr.indexOf('#')) {
//false
}
if (!~~~elementStr.indexOf('#')) {
//true
}
你可以每次都加~,语句boolean会一直变化。
现在有人可以解释一下它在这个示例中的作用,以及我是否可以安全地使用该标志?
【问题讨论】:
-
如果我可以安全地使用那个标志——你不知道它的作用。很多人不知道它的作用。使用它会使代码比
!==干净得多。不要为此使用它。 -
Drat,我的意思是说“清楚”而不是“干净”。
标签: javascript