JSFiddle - React, Tailwind, and code Playground
JavaScript
'use strict';
function typeOfArg(arg) {
var defined = ['String', 'Number', 'Object', 'Date', 'Undefined', 'Null', 'Array', 'Object', 'Function'];
// "[object X]" to "X"
var argToString = {}.toString.call(arg).slice(8, -1);
if (defined.indexOf(argToString) >= 0) {
return argToString;
} else if (typeof arg == 'object'
&& typeof arg.length == 'number'
&& arg.length >= 0
&& arg.join === undefined) {
return 'Array-like';
} else {
return 'Error: type is not known';
}
}
// Тестовые объекты
// Array-like объект NodeList
var el = document.createDocumentFragment();
el.appendChild(document.createDocumentFragment());
var nodeList = el.childNodes;
// Array-like объект HtmlCollection
var htmlColl = document.forms;
// Array-like объект arguments
var args = (() => arguments)();
function Foo() {};
var testcases = [
['String', ''],
['Number', 12],
['Date', new Date],
['Array-like', htmlColl],
['Array-like', args],
['Undefined', undefined],
['Null', null],
['Array', []],
['Array', [1, 2, 4]],
['Object', {}],
['Object', {'key': 'value'}],
['Object', new Foo],
['Function', function() {}],
];
for (var [expected, test] of testcases) {
console.log(expected + ': ', typeOfArg(test));
}