3 * Array か?判定する。argumnets 等のフェイク Array は false なので注意。
\r
5 * @alias X.Type._isArray
\r
9 X_UA[ 'IE' ] < 5.5 || X_UA[ 'NetFront' ] < 4 ? // netfront3.4 は html に instanceof をすると error になる
\r
10 'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2
\r
12 'return v&&Object.prototype.toString.call(v)==="[object Array]"' :
\r
13 'return v instanceof Array'
\r
17 * HTMLElement か?判定する。ちなみに return v instanceof Element は ie8 でエラー。
\r
19 * @alias X.Type.isHTMLElement
\r
21 X_Type_isHTMLElement =
\r
23 ( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ) ?
\r
24 'return v&&v.tagName&&v.insertAdjacentHTML&&true' : // ie4 or MacIE5.23, v.all <- error
\r
25 X_UA[ 'NetFront' ] < 4 ?
\r
26 'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に instanceof をすると error になる
\r
27 window[ 'HTMLElement' ] ?
\r
28 'return v instanceof HTMLElement' :
\r
29 'return v&&v.appendChild&&v.nodeType===1'
\r
35 * http://pettanr.sourceforge.jp/test/type.html
\r
36 * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。
\r
42 'isObject' : X_Type_isObject,
\r
43 'isFunction' : X_Type_isFunction,
\r
44 'isUnknown' : X_Type_isUnknown,
\r
45 'isArray' : X_Type_isArray,
\r
46 'isBoolean' : X_Type_isBoolean,
\r
47 'isString' : X_Type_isString,
\r
48 'isNumber' : X_Type_isNumber,
\r
49 'isFinite' : X_Type_isFinite,
\r
50 'isNaN' : X_Type_isNaN,
\r
51 'isHTMLElement' : X_Type_isHTMLElement,
\r
52 'isImage' : X_Type_isImage,
\r
53 'isNull' : X_Type_isNull,
\r
54 'isUndefined' : X_Type_isUndefined
\r
58 * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。
\r
59 * new String(), new Number(), new Boolean() も typeof object なので対策
\r
60 * @alias X.Type.isObject
\r
62 function X_Type_isObject( v ){
\r
63 return v && typeof v === 'object'; // && ( v !== v + '' && v !== v + 0 && v !== true ) ; // typeof null === 'object' に対策
\r
67 * @alias X.Type.isFunction
\r
69 function X_Type_isFunction( v ){
\r
70 return typeof v === 'function';
\r
73 * ie の XHR.open 等ビルトインオブジェクトか?判定する。
\r
74 * @alias X.Type.isUnknown
\r
76 function X_Type_isUnknown( v ){
\r
77 return typeof v === 'unknown';
\r
82 * @alias X.Type.isBoolean
\r
84 function X_Type_isBoolean( v ){
\r
85 return v === true || v === false;
\r
89 * @alias X.Type.isString
\r
91 function X_Type_isString( v ){
\r
92 return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。
\r
96 * @alias X.Type.isNumber
\r
98 function X_Type_isNumber( v ){
\r
99 return typeof v === 'number'; // v !== v || v + 0 === v;
\r
102 * finite か?判定する。isFinite( '123' ) === true に対策済。
\r
103 * @alias X.Type.isFinite
\r
105 function X_Type_isFinite( v ){
\r
106 return typeof v === 'number' && isFinite( v );
\r
109 * NaN か?判定する。isNaN( 'NaN' ) === true に対策済。
\r
110 * @alias X.Type.isNaN
\r
112 function X_Type_isNaN( v ){
\r
118 * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある
\r
119 * @alias X.Type.isImage
\r
121 function X_Type_isImage( v ){
\r
122 if( v && v.constructor === window.Image ) return true;
\r
123 if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要
\r
124 if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-
\r
125 if( v && v.src !== undefined && v.onload !== undefined && X_Type_isNumber( v.height ) && X_Type_isNumber( v.width ) && X_Type_isBoolean( v.complete ) ){
\r
132 isElementCollection : function(v) {
\r
133 return (Object.prototype.toString.call(v) === "[object HTMLCollection]");
\r
138 * @alias X.Type.isNull
\r
140 function X_Type_isNull( v ){
\r
144 * undefined か?判定する。
\r
145 * @alias X.Type.isUndefined
\r
147 function X_Type_isUndefined( v ){
\r
148 return v === void 0;
\r
151 console.log( 'X.Core.Type' );
\r