-/*\r
- * http://pettanr.sourceforge.jp/test/type.html\r
- * \r
- * need xua\r
- */\r
-\r
-X.Type = {\r
- isObject : function( v ){\r
- return v && typeof v === 'object'; // typeof null === 'object' に対策\r
- },\r
- \r
- isFunction : function( v ){\r
- return typeof v === 'function';\r
- },\r
- \r
- isUnknown : function( v ){\r
- return typeof v === 'unknown'; // ie の XHR.open など\r
- },\r
- \r
- isArray :\r
+var\r
+ /**\r
+ * Array か?判定する。argumnets 等のフェイク Array は false なので注意。\r
+ * @funciton\r
+ * @alias X.Type._isArray\r
+ */\r
+ X_Type_isArray =\r
new Function( 'v',\r
- X_UA.IE < 5.5 ?\r
+ X_UA[ 'IE' ] < 5.5 || X_UA[ 'NetFront' ] < 4 ? // netfront3.4 は html に instanceof をすると error になる\r
'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\r
- X_UA.IE ?\r
+ X_UA[ 'IE' ] ?\r
'return v&&Object.prototype.toString.call(v)==="[object Array]"' :\r
'return v instanceof Array'\r
),\r
- \r
- isBoolean : function( v ){\r
- return v === true || v === false;\r
- },\r
- \r
- isString : function( v ){\r
- return typeof v === 'string'; // v === v + '';\r
- },\r
- \r
- isNumber : function( v ){\r
- return typeof v === 'number'; // v !== v || v + 0 === v;\r
- },\r
- \r
- isFinite : function( v ){\r
- return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) === true に対策\r
- },\r
- \r
- isNaN : function( v ){\r
- return v !== v; // isNaN( 'NaN' ) === true に対策\r
- },\r
- \r
- isHTMLElement :\r
+\r
+ /**\r
+ * HTMLElement か?判定する。ちなみに return v instanceof Element は ie8 でエラー。\r
+ * @funciton\r
+ * @alias X.Type.isHTMLElement\r
+ */\r
+ X_Type_isHTMLElement =\r
new Function( 'v',\r
- ( X_UA.IE4 || X_UA.MacIE ) ?\r
+ ( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ) ?\r
'return v&&v.tagName&&v.insertAdjacentHTML&&true' : // ie4 or MacIE5.23, v.all <- error\r
+ X_UA[ 'NetFront' ] < 4 ?\r
+ 'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に instanceof をすると error になる\r
window[ 'HTMLElement' ] ?\r
'return v instanceof HTMLElement' :\r
- //window[ 'Element' ] ?\r
- // 'return v instanceof Element' : // error @ie8\r
'return v&&v.appendChild&&v.nodeType===1'\r
- ),\r
+ );\r
+\r
+\r
+\r
+/**\r
+ * http://pettanr.sourceforge.jp/test/type.html\r
+ * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。\r
+ * \r
+ * @namespace X.Type\r
+ * @alias X.Type\r
+ */\r
+X[ 'Type' ] = {\r
+ 'isObject' : X_Type_isObject,\r
+ 'isFunction' : X_Type_isFunction,\r
+ 'isUnknown' : X_Type_isUnknown,\r
+ 'isArray' : X_Type_isArray,\r
+ 'isBoolean' : X_Type_isBoolean,\r
+ 'isString' : X_Type_isString,\r
+ 'isNumber' : X_Type_isNumber,\r
+ 'isFinite' : X_Type_isFinite,\r
+ 'isNaN' : X_Type_isNaN,\r
+ 'isHTMLElement' : X_Type_isHTMLElement,\r
+ 'isImage' : X_Type_isImage,\r
+ 'isNull' : X_Type_isNull,\r
+ 'isUndefined' : X_Type_isUndefined\r
+};\r
+\r
+ /**\r
+ * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。\r
+ * new String(), new Number(), new Boolean() も typeof object なので対策\r
+ * @alias X.Type.isObject\r
+ */\r
+ function X_Type_isObject( v ){\r
+ return v && typeof v === 'object'; // && ( v !== v + '' && v !== v + 0 && v !== true ) ; // typeof null === 'object' に対策\r
+ };\r
+ /**\r
+ * Function か?判定する。\r
+ * @alias X.Type.isFunction\r
+ */\r
+ function X_Type_isFunction( v ){\r
+ return typeof v === 'function';\r
+ };\r
+ /**\r
+ * ie の XHR.open 等ビルトインオブジェクトか?判定する。\r
+ * @alias X.Type.isUnknown\r
+ */\r
+ function X_Type_isUnknown( v ){\r
+ return typeof v === 'unknown';\r
+ };\r
+\r
+ /**\r
+ * 真偽値か?判定する。\r
+ * @alias X.Type.isBoolean\r
+ */\r
+ function X_Type_isBoolean( v ){\r
+ return v === true || v === false;\r
+ };\r
+ /**\r
+ * 文字列か?判定する。\r
+ * @alias X.Type.isString\r
+ */\r
+ function X_Type_isString( v ){\r
+ return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。\r
+ };\r
+ /**\r
+ * 数値値か?判定する。\r
+ * @alias X.Type.isNumber\r
+ */\r
+ function X_Type_isNumber( v ){\r
+ return typeof v === 'number'; // v !== v || v + 0 === v;\r
+ };\r
+ /**\r
+ * finite か?判定する。isFinite( '123' ) === true に対策済。\r
+ * @alias X.Type.isFinite\r
+ */\r
+ function X_Type_isFinite( v ){\r
+ return typeof v === 'number' && isFinite( v );\r
+ };\r
+ /**\r
+ * NaN か?判定する。isNaN( 'NaN' ) === true に対策済。\r
+ * @alias X.Type.isNaN\r
+ */\r
+ function X_Type_isNaN( v ){\r
+ return v !== v;\r
+ };\r
+\r
\r
/*\r
- * new Image した場合に HTMLElement の img が作られるブラウザもある\r
+ * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある\r
+ * @alias X.Type.isImage\r
*/ \r
- isImage :\r
- function( v ){\r
- if( v && v.constructor === window.Image ) return true;\r
- if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要\r
- if( X_UA.WebKit < 525.13 ){ // Safari3-\r
- if( v && v.src !== undefined && v.onload !== undefined && X.Type.isNumber( v.height ) && X.Type.isNumber( v.width ) && X.Type.isBoolean( v.complete ) ){\r
- return true;\r
- };\r
+ function X_Type_isImage( v ){\r
+ if( v && v.constructor === window.Image ) return true;\r
+ if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要\r
+ if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
+ if( v && v.src !== undefined && v.onload !== undefined && X_Type_isNumber( v.height ) && X_Type_isNumber( v.width ) && X_Type_isBoolean( v.complete ) ){\r
+ return true;\r
};\r
- return false;\r
- },\r
+ };\r
+ return false;\r
+ };\r
/*\r
isElementCollection : function(v) {\r
return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
},\r
*/\r
- isNull : function( v ){\r
+ /**\r
+ * Null か?判定する。\r
+ * @alias X.Type.isNull\r
+ */\r
+ function X_Type_isNull( v ){\r
return v === null;\r
- },\r
- \r
- isUndefined : function( v ){\r
+ };\r
+ /**\r
+ * undefined か?判定する。\r
+ * @alias X.Type.isUndefined\r
+ */\r
+ function X_Type_isUndefined( v ){\r
return v === void 0;\r
- }\r
-};\r
+ };\r
\r
console.log( 'X.Core.Type' );\r