【问题标题】:what's the " !~" mean in javascript [duplicate]javascript中的“!〜”是什么意思[重复]
【发布时间】:2015-02-10 03:20:49
【问题描述】:
(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//
            names.push(name);
    console.log(names);// ["linkFly"]
    }
}())('linkFly');

有时我看到这个逻辑,这是什么意思? 谢谢~

【问题讨论】:

  • 你可以从中得到你喜欢的意思。我喜欢认为这意味着代码的编写者认为其他任何人都不必阅读他们的代码。
  • 我知道它是如何工作的,这是一种不好的做法,谢谢大家~~~

标签: javascript


【解决方案1】:

tl;dr

indexOf 在数组中找不到元素时返回 -1。因此,if 语句检查是否在names 中找不到name!~-1 ==> true

加长版:

波浪号 (~) 运算符(按位非)产生 a 的反转值(也称为反码)。 [Source] 例如,~-1 === 0。请注意0 == false!0 === trueindexOf 在数组中找不到元素时返回 -1。因此,我们可以使用!~-1 === true来判断indexOf是否在names中找不到name(即返回-1)。

我的看法:

如您所见,在不使用 cmets 的情况下使用这些混淆或“聪明”的技术确实会使读者感到困惑。如果您确实喜欢这些技术,请记录下您的代码行在做什么,以供读者阅读!

【讨论】:

  • 只有 !~(-1) 返回 ture ?
  • 您认为这是不好的做法吗?它不完全是自我记录的代码。
  • 这是一个简单的解释,波浪号翻转位,! 将其反转为布尔值,即使它与names.indexOf(name) != -1 基本相同,这个答案几乎无法解释任何有意义的行为方式?
  • 附带说明:此代码是不必要的“聪明”。保存几个字符不值得它造成的混乱。我说这是不好的做法。
  • @simotophs23 是的,因为零是唯一的假数。注意~-1 === 0.
【解决方案2】:

! (逻辑非) 如果其单个操作数可以转换为 true,则返回 false;否则,返回真。

对于除 -1 之外的所有整数操作数,应用 ~ 运算符后的净操作数!运算符本质上是真实的,导致 FALSE。 -1 是特殊的,因为 ~(-1) 给出 0 这在 JavaScript 中是错误的。添加!运算符给了我们唯一的 TRUE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 2019-12-20
    • 2019-02-26
    • 2014-12-31
    • 2015-07-15
    • 2018-07-17
    • 2011-04-16
    • 2017-10-20
    相关资源
    最近更新 更多