7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>`Y.Lang` contains JavaScript language utilities and extensions that are used in the core library.
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Array</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>Testing for an actual `Array`, this helps fight against false positives from `arguments` and `getElementsBy*` array-like structures.</p>
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// true, an array literal is an array
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// false, an object literal is not an array
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isArray({"one": "two"});
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// however, when declared as an array, it is true
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass var a = new Array();
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass a["one"] = "two";
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// false, a collection of elements is like an array, but isn't
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isArray(document.getElementsByTagName("body"));
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Object</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>Checking for `Objects`, since `new Object()`, '{}', '[]' and `function(){}` are all technically Objects.</p>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass// true, objects, functions, and arrays are objects
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass// false, primitives are not objects
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Function</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>Checking for `Function`, since a `function` is a `function`, but an `Object` is not a function.</p>
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isFunction(function(){}); // true
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isFunction({foo: "bar"}); // false
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Number & String</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>Making sure that `Strings` are really `Strings` and `Numbers` are really `Numbers`.</p>
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// true, ints and floats are numbers
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// false, strings that can be cast to numbers aren't really numbers
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// false, undefined numbers and infinity are not numbers we want to use
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isString({foo: "bar"}); // false
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isString(true); // false
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Boolean</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>Making sure that a `Boolean` is really a `Boolean`.</p>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass// true, false is a boolean
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass// false, 1 and the string "true" are not booleans
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<h2>Null & Undefined</h2>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav Glass<p>`null` is `null`, but `false`, `undefined` and `""` are not.</p>
7bf968657bff10ad28ae9742176e4e814dbc3849Dav GlassY.Lang.isNull(undefined); // false
72d545a3aacf73830ad019134a025794ed01ce1eDav Glass// undefined is undefined, but null and false are not
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isUndefined(undefined); // true
72d545a3aacf73830ad019134a025794ed01ce1eDav GlassY.Lang.isUndefined(false); // false