2 * Array か?判定する。argumnets 等のフェイク Array は false なので注意。
\r
4 * @alias X.Type.isArray
\r
8 X_UA[ 'IE' ] < 5.5 || X_UA[ 'NetFront' ] < 4 ? // netfront3.4 は html に instanceof をすると error になる
\r
9 'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2
\r
11 'return v&&Object.prototype.toString.call(v)==="[object Array]"' :
\r
12 'return v instanceof Array'
\r
16 * HTMLElement か?判定する。ちなみに return v instanceof Element は ie8 でエラー。
\r
18 * @alias X.Type.isHTMLElement
\r
20 X_Type_isHTMLElement =
\r
22 ( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ) ?
\r
23 'return v&&v.tagName&&v.insertAdjacentHTML&&!0' : // ie4 or MacIE5.23, v.all <- error
\r
24 X_UA[ 'NetFront' ] < 4 ?
\r
25 'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に instanceof をすると error になる
\r
26 window[ 'HTMLElement' ] ?
\r
27 'return v instanceof HTMLElement' :
\r
28 'return v&&v.appendChild&&v.nodeType===1'
\r
34 * <p>ビルトイン型の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。
\r
35 * <a href="http://pettanr.sourceforge.jp/test/type.html">http://pettanr.sourceforge.jp/test/type.html</a>
\r
40 'isObject' : X_Type_isObject,
\r
41 'isFunction' : X_Type_isFunction,
\r
42 'isUnknown' : X_Type_isUnknown,
\r
43 'isArray' : X_Type_isArray,
\r
44 'isBoolean' : X_Type_isBoolean,
\r
45 'isString' : X_Type_isString,
\r
46 'isNumber' : X_Type_isNumber,
\r
47 'isFinite' : X_Type_isFinite,
\r
48 'isNaN' : X_Type_isNaN,
\r
49 'isHTMLElement' : X_Type_isHTMLElement,
\r
50 'isImage' : X_Type_isImage,
\r
51 'isNull' : X_Type_isNull,
\r
52 'isUndefined' : X_Type_isUndefined
\r
57 * <p>typeof null === 'object' に対策済なので null は Object ではない。
\r
58 * <p>new String(), new Number(), new Boolean() も typeof object なので対策
\r
59 * @alias X.Type.isObject
\r
61 function X_Type_isObject( v ){
\r
62 return v && typeof v === 'object' && v !== v + '' && v !== v + 0 && v !== true; // typeof null === 'object' に対策
\r
66 * @alias X.Type.isFunction
\r
68 function X_Type_isFunction( v ){
\r
69 return typeof v === 'function';
\r
72 * ie の XHR.open 等ビルトインオブジェクトか?判定する。
\r
73 * @alias X.Type.isUnknown
\r
75 function X_Type_isUnknown( v ){
\r
76 return typeof v === 'unknown';
\r
81 * @alias X.Type.isBoolean
\r
83 function X_Type_isBoolean( v ){
\r
84 return v === true || v === false;
\r
88 * @alias X.Type.isString
\r
90 function X_Type_isString( v ){
\r
91 return /* typeof v === 'string'; */ v === v + ''; // 文字列の加算は IE で遅いかも。
\r
95 * @alias X.Type.isNumber
\r
97 function X_Type_isNumber( v ){
\r
98 return /* typeof v === 'number'; */ v + 0 === v || v !== v;
\r
101 * finite か?判定する。isFinite( '123' ) === true に対策済。
\r
102 * @alias X.Type.isFinite
\r
104 function X_Type_isFinite( v ){
\r
105 return v + 0 === v && isFinite( v );
\r
108 * NaN か?判定する。isNaN( 'NaN' ) === true に対策済。
\r
109 * @alias X.Type.isNaN
\r
111 function X_Type_isNaN( v ){
\r
117 * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある
\r
118 * @alias X.Type.isImage
\r
120 function X_Type_isImage( v ){
\r
121 if( v && v.constructor === window.Image ) return true;
\r
122 if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要
\r
123 if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-
\r
124 if( v && v.src !== undefined && v.onload !== undefined && X_Type_isNumber( v.height ) && X_Type_isNumber( v.width ) && X_Type_isBoolean( v.complete ) ){
\r
131 isElementCollection : function(v) {
\r
132 return (Object.prototype.toString.call(v) === "[object HTMLCollection]");
\r
137 * @alias X.Type.isNull
\r
139 function X_Type_isNull( v ){
\r
143 * undefined か?判定する。
\r
144 * @alias X.Type.isUndefined
\r
146 function X_Type_isUndefined( v ){
\r
147 return v === undefined;
\r
150 console.log( 'X.Core.Type' );
\r