gpt4 book ai didi

javascript - !!~(不是 not not tilde/bang bang tilde)如何改变 'contains/included' 数组方法调用的结果?

转载 作者:IT王子 更新时间:2023-10-29 02:43:43 33 4
gpt4 key购买 nike

如果您阅读 jQuery inArray 页面上的评论 here ,有一个有趣的声明:

!!~jQuery.inArray(elm, arr) 

现在,我相信双感叹号会将结果转换为 boolean 类型,值为 true。我不明白的是波浪号 (~) 运算符在所有这些中有什么用?

var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }

重构 if 语句:

if (!!~jQuery.inArray("one", arr)) { alert("Found"); }

分割:

jQuery.inArray("one", arr)     // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true

我还注意到,如果我将波浪号放在前面,结果是 -2

~!!~jQuery.inArray("one", arr) // -2

我不明白波浪号在这里的用途。有人可以解释一下或指出我的资源吗?

最佳答案

您有时会看到在 $.inArray 前面应用 ~ 是有特定原因的。

基本上,

~$.inArray("foo", bar)

是一种更短的方式

$.inArray("foo", bar) !== -1

$.inArray 如果找到第一个参数,则返回数组中项目的索引,如果未找到,则返回 -1。这意味着如果你正在寻找一个 bool 值“这个值在数组中吗?”,你不能做 bool 比较,因为 -1 是一个真值,而当 $.inArray 返回 0(一个假值), 这意味着它实际上在数组的第一个元素中找到。

应用 ~ 按位运算符会使 -1 变为 0,并使 0 变为 `-1。因此,在数组中找不到值并应用按位 NOT 会导致错误值 (0),所有其他值将返回非 0 数字,并表示真实结果。

if (~$.inArray("foo", ["foo",2,3])) {
// Will run
}

它会按预期工作。

关于javascript - !!~(不是 not not tilde/bang bang tilde)如何改变 'contains/included' 数组方法调用的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316612/

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