Skip to content

Instantly share code, notes, and snippets.

@drakeirving
Created May 17, 2018 04:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drakeirving/b0d0a8400c1cfff80385f95e5d6d9d3e to your computer and use it in GitHub Desktop.
Save drakeirving/b0d0a8400c1cfff80385f95e5d6d9d3e to your computer and use it in GitHub Desktop.
typeof
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