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