detect "null"
-
@parabuh That won't tell you is the variable is null
-
@d-healey Hmmm... I just discovered that a value of
0 == undefined
Back to school for me! -
@parabuh that will not work
-
@ustk I never use
var == undefinedI always useisDefined(var)I just noticed this guy commented on my video (I think I might re-record that one)

-
@d-healey
if I declare a variable like this
const t = null;First I'll get
Console.print(t); API call with undefined parameter 0Console.print(t == void); result: 1 Console.print(t == undefined); result: 1 Console.print(t == null); result: 1 Console.print(t === void); result: 0 Console.print(t === undefined); result: 0 Console.print(t === null); result: 1but my variable show up as null, and if I use
Console.print(myvariable === null); result: 0Are there different kind of "null"??
-
@ulrik Are you sure your variable is null?
-
@d-healey that's what it's saying if I Console.print it
my var is inside an array and if trace log it will say something like this:Interface: [ 3, null ] -
@ulrik I think you need to give us an example we can test.
This works for me:
const a = [3, null]; Console.print(a[1] === null);So you must be doing something different.
-
@ulrik Ok, I Console.print each member of the array and got this instead:
Interface: infso if trace logged it show up as "null" and if logged independently it show up as "inf"
-
@ulrik @d-healey so what does "inf" stand for, infinite?
-
@ulrik No idea. I'd recommend you try to always populate your variables yourself so you know what it contains.
-
Yes, inf is infinite:
Console.print(1.0 / 0.0)But the question is: how did you get
nullin the first place? I honestly didn't know that existed, we've gotundefinedfor a uninitialized variable,voidfor a invalid array or object field andinfandnanfor illegal number values.var x = 1 / 0.0; x = 0.0 * x; var a = [1]; var n; Console.print(typeof(a[9])); // => void Console.print(typeof(b)); // => undefined Console.print(typeof(1.0 / 0.0)); // => number Console.print(typeof(n)); // => undefined Console.print(x); // => nan -
@Christoph-Hart ok thanks!
As I said here:
@ulrik Ok, I Console.print each member of the array and got this instead:
Interface: infso if trace logged it show up as "null" and if logged independently it show up as "inf"
It seems the
Console.print(trace(array))is not showing correct information?
-
@ulrik I just skimmed through the JUCE codebase and the only time where
nullis used is when you convert a JSON object with a void field to a string (which would be the case if you do something likeConsole.print(trace(array)command). I guess that's just for compatibility reasons with the JSON standard and it is still being typed internally asvoid. I can't say why it is behaving like that with aninfnumber though, as this is clearly a number type and should be treated as such (eg.isDefined(1.0/0.0)returns true).However I got this output:

so apparently assigning
voidto a field is the same as assigningundefined(which I thought were two different things), however theisDefined()check works correctly on all of them.BTW, using
infas literal is not protected, so you can do stuff like:var inf = 90; Console.print(inf); -
@Christoph-Hart Is it normal that
a[2]set tonullis throwingundefined? It's weird to me because it is actually defined asnull...EDIT: I think I have my answer...
console.log(null === undefined) // false (not the same type) console.log(null == undefined) // true (but the "same value")
-
