you can’t use + with arrays so they are converted to strings, so you get an empty string from empty arrays
same as above, just the empty object converted to string becomes [object Object]
So, + can be both a number or string operator, with 90 + '1' as you have a string in there, everything becomes string, and the result is "901", instead - is only a number operator, so with 90 - '1' everything is converted to numbers, and it makes 90
floating numbers math. look this:
I’m going with this:
because (! + [] + [] + ![]) evaluates as 'truefalse'
why?
let’s take it in steps ! flips the boolean value of what it has after +[] evaluatest to 0
so !+[] makes true
so now we have true + []
everything is converted to string, so it becomes "true"
now there is "true" + ![]
the empty array is a truthy value, so flipping its boolean value make it false
so there is "true" + false which becomes "truefalse", and has nine characters
above a certain value there is the same issue than with decimals, precision is lost because there are not enough bits available to use
so there you need to use BigInt data type