OSDN Git Service

Version 0.6.132, fix X.Node._flags & fix X.EventDispatcher._listeners & start to...
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 03_XType.js
1 /**\r
2  * http://pettanr.sourceforge.jp/test/type.html\r
3  * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。\r
4  * \r
5  * @namespace X.Type\r
6  * @alias X.Type\r
7  */\r
8 X.Type = {\r
9         /**\r
10          * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。\r
11          */\r
12         isObject : function( v ){\r
13                 return v && typeof v === 'object'; // typeof null === 'object' に対策\r
14         },\r
15         /**\r
16          * Function か?判定する。\r
17          */\r
18         isFunction : function( v ){\r
19                 return typeof v === 'function';\r
20         },\r
21         /**\r
22          * ie の XHR.open 等ビルトインオブジェクトか?判定する。\r
23          */\r
24         isUnknown : function( v ){\r
25                 return typeof v === 'unknown';\r
26         },\r
27         /**\r
28          * Array か?判定する。argumnets 等のファイク Array は false なので注意。\r
29          * @funciton\r
30          */\r
31         isArray :\r
32                 new Function( 'v',\r
33                         X_UA.IE < 5.5 || X_UA.NetFront < 4 ? // netfront3.4 は html に  instanceof をすると error になる\r
34                                 'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\r
35                         X_UA.IE ?\r
36                                 'return v&&Object.prototype.toString.call(v)==="[object Array]"' :\r
37                                 'return v instanceof Array'\r
38                 ),\r
39         /**\r
40          * 真偽値か?判定する。\r
41          */\r
42         isBoolean : function( v ){\r
43                 return v === true || v === false;\r
44         },\r
45         /**\r
46          * 文字列か?判定する。\r
47          */\r
48         isString : function( v ){\r
49                 return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。\r
50         },\r
51         /**\r
52          * 数値値か?判定する。\r
53          */\r
54         isNumber : function( v ){\r
55                 return typeof v === 'number'; // v !== v || v + 0 === v;\r
56         },\r
57         /**\r
58          * finite か?判定する。isFinite( '123' ) === true に対策済。\r
59          */\r
60         isFinite : function( v ){\r
61                 return typeof v === 'number' && isFinite( v );\r
62         },\r
63         /**\r
64          * NaN か?判定する。isNaN( 'NaN' ) === true     に対策済。\r
65          */\r
66         isNaN : function( v ){\r
67                 return v !== v;\r
68         },\r
69         /**\r
70          * HTMLElement か?判定する。\r
71          * @funciton\r
72          */\r
73         isHTMLElement :\r
74                 new Function( 'v',\r
75                         ( X_UA.IE4 || X_UA.MacIE ) ?\r
76                                 'return v&&v.tagName&&v.insertAdjacentHTML&&true' : // ie4 or MacIE5.23, v.all <- error\r
77                         X_UA.NetFront < 4 ?\r
78                                 'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に  instanceof をすると error になる\r
79                         window[ 'HTMLElement' ] ?\r
80                                 'return v instanceof HTMLElement' :\r
81                         //window[ 'Element' ] ?\r
82                         //      'return v instanceof Element' : // error @ie8\r
83                                 'return v&&v.appendChild&&v.nodeType===1'\r
84                 ),\r
85         \r
86         /*\r
87          * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある\r
88          */     \r
89         isImage :\r
90                 function( v ){\r
91                         if( v && v.constructor === window.Image ) return true;\r
92                         if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要\r
93                         if( X_UA.WebKit < 525.13 ){ // Safari3-\r
94                                 if( v && v.src !== undefined && v.onload !== undefined && X.Type.isNumber( v.height ) && X.Type.isNumber( v.width ) && X.Type.isBoolean( v.complete ) ){\r
95                                         return true;\r
96                                 };\r
97                         };\r
98                         return false;\r
99                 },\r
100         /*\r
101         isElementCollection : function(v) {\r
102                 return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
103         },\r
104         */\r
105         /**\r
106          * Null か?判定する。\r
107          */\r
108         isNull : function( v ){\r
109                 return v === null;\r
110         },\r
111         /**\r
112          * undefined か?判定する。\r
113          */\r
114         isUndefined : function( v ){\r
115                 return v === void 0;\r
116         }\r
117 };\r
118 \r
119 console.log( 'X.Core.Type' );\r