James Froggatt
asked on
In Javascript, what does "if (x) x =" mean?
I'm writing an auto-complete script little by little (html/ plain javascript/ php/ ajax).
I've come across the following code:
... and would like to understand this particular bit of the above code
What does the following bit mean? I've never seen logic like this before.
if (x) x =
Is this a comparison / some kind of logical operator? I'm wondering if it's a way to detect whether x is NULL and so get information from the immediate parent element. Nevertheless, I'd like to understand what it means.
If so, in 'long English', what does it mean?
Thank you
I've come across the following code:
var x = document.getElementById(this.id + "autocomplete-list");
if (x) x = x.getElementsByTagName("div");
... and would like to understand this particular bit of the above code
What does the following bit mean? I've never seen logic like this before.
if (x) x =
Is this a comparison / some kind of logical operator? I'm wondering if it's a way to detect whether x is NULL and so get information from the immediate parent element. Nevertheless, I'd like to understand what it means.
If so, in 'long English', what does it mean?
Thank you
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I.e.
if (x) // if x exists (is not a null value)
{
x = x.getElementsByTagName("di v");
}
if (x) // if x exists (is not a null value)
{
x = x.getElementsByTagName("di
}
ASKER
Concise, to the point, clearly saw what I was having difficulty with. Spot on!
Thank you ste5an
Thank you ste5an
The test is using the principle of "truthy" and "falsy" and will coerce them into true or false
The code you posted may be misleading later since it tests that x is set to something, anything instead of testing that the assignment returned a collection as expected
It luckily works, but if we convert it to jQuery for example, we are better off testing the length since $x will be a jQuery object regardless and you will get the error further down
In JS the following are considered false in a conditional
* false (boolean)
* 0 (number)
* 0n (BigInt)
* NaN (Not a Number)
* Empty string
* undefined
* null
whereas true will be whatever is not falsy - even empty objects
A complete run down is found here
https://medium.com/coding-at-dawn/what-are-falsy-values-in-javascript-ca0faa34feb4
The code you posted may be misleading later since it tests that x is set to something, anything instead of testing that the assignment returned a collection as expected
var x = document.getElementById(this.id + "autocomplete-list"); // returns an DOM node or undefined/null if nothing exists
if (x) x = x.getElementsByTagName("div"); // test that the previous returned something and then find the divs inside it
It luckily works, but if we convert it to jQuery for example, we are better off testing the length since $x will be a jQuery object regardless and you will get the error further down
var $x = $("#"+this.id + "autocomplete-list"); // returns an jQuery object regardless of existence of a list
if ($x.length >0) $x = $("div",$x); // better test
In JS the following are considered false in a conditional
* false (boolean)
* 0 (number)
* 0n (BigInt)
* NaN (Not a Number)
* Empty string
* undefined
* null
whereas true will be whatever is not falsy - even empty objects
A complete run down is found here
https://medium.com/coding-at-dawn/what-are-falsy-values-in-javascript-ca0faa34feb4
ASKER
Michel,
Thank you for your further comments, I've learnt alot here!
Best wishes
James
Thank you for your further comments, I've learnt alot here!
Best wishes
James
ASKER
Ah ha!
So it's really saying;
"if the autocomplete-list currently defined as x exists, x is all the elements with tagname 'div'"
Is that correct?
If it is, you're a star, I've not come across a syntax option like the above before.
Thanks