I am trying to work out some obfusicated code by reading it, and I was doing pretty well until a came across this:
a = a && "*"
Now I am still quite new to Javascript and these shortened uncommon javascript codes are still very foreign to me, this is the first time I have come across them.
Does anybody know what this does? I attempted it in a javascript code tester ad it just returned *, so I do not know.
Also, if anybody knows where I can look to find out what these uncommon lines of code do, that would be very helpful. They are all shortened and are sorts of things like this and
a = a || b
(I know what that one does)
But If there is some sort of name for this kind of javascript or a reference I can look at, that would be very helpful, I have been scouring Google for hours.
Thanks
If a
is truthy, it assigns "*"
to a
.
If a
is falsy, it remains untouched.
&&
has short-circuit semantics: A compound expression (e1) && (e2)
—where e1
and e2
are arbitrary expressions themselves—evaluates to either
e1
if e1
evaluates to false in a boolean context—e2
is not evaluatede2
if e1
evaluates to true in a boolean contextThis does not imply that e1
or e2
and the entire expression (e1) && (e2)
need evaluate to true or false!
In a boolean context, the following values evaluate to false
as per the spec:
All1 other values are considered true
.
The above values are succinctly called "falsy" and the others "truthy".
Applied to your example: a = a && "*"
According to the aforementioned rules of short-circuit evaluation for &&
, the expression evaluates to a
if a
is falsy, which is then in turn assigned to a
, i.e. the statement simplifies to a = a
.
If a
is truthy, however, the expression on the right-hand side evaluates to *
, which is in turn assigned to a
.
As for your second question: (e1) || (e2)
has similar semantics:
The entire expression evaluates to:
e1
if e1
is truthye2
if e1
is falsy1Exception
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With