-
-
Save drakeirving/b0d0a8400c1cfff80385f95e5d6d9d3e to your computer and use it in GitHub Desktop.
typeof
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let TYPE_NUMBER = 0; | |
let TYPE_BOOL = 1; | |
let TYPE_CHAR = 2; | |
let TYPE_STRING = 3; | |
let TYPE_ARRAY_CHAR = 3; | |
let TYPE_ARRAY = 4; | |
let TYPE_NAN = -1; | |
let TYPE_UNKNOWN = -2; | |
function typeof(x){ | |
let len = length(x); | |
let strlen = length(ToString(x)); | |
let truthy = !!(length(x)==0 && max((|x|), 0)); | |
if(x != x){ return TYPE_NAN; } // NaN | |
if(truthy){ | |
if(strlen >= 8){ | |
return TYPE_NUMBER; | |
}else if(strlen == 1){ | |
return TYPE_CHAR; | |
}else if(strlen == 4){ | |
return TYPE_BOOL; // true | |
}else{ | |
return TYPE_UNKNOWN; | |
} | |
}else{ | |
if(len > 0){ | |
// array | |
let stringy = (length(ToString(x[0..0])) == 0); | |
if(stringy){ | |
return TYPE_STRING; | |
}else{ | |
return TYPE_ARRAY; | |
} | |
}else{ // len == 0 | |
if(strlen == 8){ | |
return TYPE_NUMBER; // 0 | |
}else if(strlen == 5){ | |
return TYPE_BOOL; // false | |
}else if(strlen == 0){ | |
return TYPE_STRING; // empty string | |
}else if(strlen == 2){ | |
return TYPE_ARRAY; // empty array | |
}else{ | |
return TYPE_UNKNOWN; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment