*/\r
\r
X.Type = {\r
- isObject : function(v) {\r
- return v !== null && typeof v === 'object';\r
+ isObject : function( v ){\r
+ return v && typeof v === 'object'; // typeof null === 'object' に対策\r
},\r
\r
- isFunction : function(v) {\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
new Function( 'v',\r
- X.UA.IE < 5.5 ? 'return v && v.push === Array.prototype.push;' : // win ie5-, MacIE5.2\r
- X.UA.IE ? 'return v && Object.prototype.toString.call(v) === "[object Array]"' :\r
- 'return v instanceof Array;'\r
+ X.UA.IE < 5.5 ?\r
+ 'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\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 typeof v === 'boolean'; // v === true || v === false;\r
+ isBoolean : function( v ){\r
+ return v === true || v === false;\r
},\r
- isString : function(v) {\r
+ \r
+ isString : function( v ){\r
return typeof v === 'string';\r
},\r
- isNumber : function(v) {\r
- return typeof v === 'number';\r
+ \r
+ isNumber : function( v ){\r
+ return typeof v === 'number'; // v !== v || v + 0 === v;\r
},\r
- isFinite : function(v){\r
- return typeof v === 'number' && isFinite(v);\r
+ \r
+ isFinite : function( v ){\r
+ return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) とかに対策\r
},\r
- isNaN : function(v){\r
- return typeof v === 'number' && v !== v;\r
+ \r
+ isNaN : function( v ){\r
+ return v !== v; // isNaN( 'NaN' ) になってしまう\r
},\r
+ \r
isHTMLElement :\r
- // ie4 or MacIE5.23\r
- ( X.UA.IE4 || X.UA.MacIE ) ? (function(v){ return v && v.tagName && v.all;}) :\r
- window['HTMLElement'] ? (new Function('v', 'return v instanceof HTMLElement')) :\r
- (function(v){ return v && v.nodeType === 1 && v.appendChild;}),\r
+ new Function( 'v',\r
+ ( X.UA.IE4 || X.UA.MacIE ) ?\r
+ 'return v&&v.tagName' : // ie4 or MacIE5.23, v.all <- error\r
+ window[ 'HTMLElement' ] ?\r
+ 'return v instanceof HTMLElement' :\r
+ //window[ 'Element' ] ?\r
+ // 'return v instanceof Element' : // error @ie8\r
+ 'return v&&v.nodeType===1&&v.appendChild'\r
+ ),\r
+ \r
+ /*\r
+ * new Image した場合に HTMLElement の img が作られるブラウザもある\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
+ };\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
+ isNull : function( v ){\r
return v === null;\r
},\r
- isUndefined : function(v) {\r
- return typeof v === 'undefined';\r
+ \r
+ isUndefined : function( v ){\r
+ return v === void 0;\r
}\r
};\r
\r