json-logic icon indicating copy to clipboard operation
json-logic copied to clipboard

Inconsistent behavior of truthiness in "!!" operator

Open BohdanCh-w opened this issue 9 months ago • 2 comments

While trying out rules on jsonlogic.com, I spotted unexpected behavior when using "!!" operator. Unfortunately, I cannot confirm if that is the problem with JS implementation, used on website, since I am working with an implementation in Go that doesn't support this operator.

The following two rules produce different result:

{
    "if": [
        [0, 1, 2],
        "True",
        "False"
    ]
}

returns "True" as expected

{
    "if": [
        {
            "!!": [0, 1, 2]
        },
        "True",
        "False"
    ]
}

returns "False", which is not what I expected, since any non-empty array should be true per documentation. And !! should correspond to JSONLogic's truthy specs.

I believe that the problem lies in !! as it returns false for any array, which first element is falsy value. { "!!": [0, 2, 3] } -> false { "!!": ["", "b", "c"] } -> false { "!!": [false, true] } -> false But { "!!": [1, 2, 3] } -> true { "!!": ["a", "b", "c"] } -> true { "!!": [true, false] } -> true

BohdanCh-w avatar Apr 29 '24 13:04 BohdanCh-w