Checking if a variable is an array

  • var noteLetters = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
    Console.print("INFO: " + (noteLetters.constructor === Array));

    The above code prints 0 (or undefined if cast to string). Any idea where I'm going wrong?

    I've also tried the following but HISE doesn't seem to like it.

    Console.print("INFO: " + (noteLetters instanceof Array));

    I've also tried the standard .isArray which didn't work, I tried it as a function too but HISE didn't recognise it. I also tried declaring the array with the "new Array" method.

  • That's the part of the Javascript engine which is not fully standard compliant. I actually never used the new keyword. It also doesn't support prototypes (which I am assuming the .constructor property is).

    But there are multiple ways to get to your solution. The fastest would be to check if the variable has a property "length", which is

    var array = ["C", 1, 2];
    var x = 24;
    var empty = [];
    var object = {}; = 12;
    function isArray(variable)
    	return !(variable.length === undefined); // === operator to catch empty arrays
    Console.print(isArray(x)); // 0
    Console.print(isArray(array)); // 1
    Console.print(isArray(empty)); // 1
    Console.print(isArray(object)); // 0

  • I thought about that but strings also have a length property so I would need an extra check too make sure it wasn't a string. I'll make a little function that does both checks thanks for the quick response

  • Oops, I forgot about strings in my little test suite

    function isArray(variable)
       return !(variable.length === undefined) && typeof(variable) != "string";

    This should do the trick…

Log in to reply