X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F03_XType.js;h=84bca3d2c863746bd796adea4ce1dcc41512a823;hb=24f935c7a129b0a00d800e4983da6491a913aeef;hp=fdf181c8642c7d2d1b209d29f2a108cf06e913f9;hpb=a130cabd01fde8865990a59d849f5d5d08ed2119;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 fdf181c..84bca3d 100644 --- a/0.6.x/js/01_core/03_XType.js +++ b/0.6.x/js/01_core/03_XType.js @@ -1,10 +1,9 @@ -var /** * Array か?判定する。argumnets 等のフェイク Array は false なので注意。 - * @funciton - * @alias X.Type._isArray + * @function + * @alias X.Type.isArray */ - X_Type_isArray = +var 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 @@ -15,13 +14,13 @@ var /** * HTMLElement か?判定する。ちなみに return v instanceof Element は ie8 でエラー。 - * @funciton + * @function * @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 + 'return v&&v.tagName&&v.insertAdjacentHTML&&!0' : // 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' ] ? @@ -32,9 +31,8 @@ var /** - * http://pettanr.sourceforge.jp/test/type.html - * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。 - * + *

ビルトイン型の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。 + * http://pettanr.sourceforge.jp/test/type.html * @namespace X.Type * @alias X.Type */ @@ -55,11 +53,13 @@ X[ 'Type' ] = { }; /** - * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。 + *

Object か?判定する。 + *

typeof null === 'object' に対策済なので null は Object ではない。 + *

new String(), new Number(), new Boolean() も typeof object なので対策 * @alias X.Type.isObject */ function X_Type_isObject( v ){ - return v && typeof v === 'object'; // typeof null === 'object' に対策 + return v && typeof v === 'object' && v !== v + '' && v !== v + 0 && v !== true; // typeof null === 'object' に対策 }; /** * Function か?判定する。 @@ -88,21 +88,21 @@ X[ 'Type' ] = { * @alias X.Type.isString */ function X_Type_isString( v ){ - return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。 + return /* typeof v === 'string'; */ v === v + ''; // 文字列の加算は IE で遅いかも。 }; /** - * 数値値か?判定する。 + * 数値か?判定する。 * @alias X.Type.isNumber */ function X_Type_isNumber( v ){ - return typeof v === 'number'; // v !== v || v + 0 === v; + return /* typeof v === 'number'; */ v + 0 === v || v !== v; }; /** * finite か?判定する。isFinite( '123' ) === true に対策済。 * @alias X.Type.isFinite */ function X_Type_isFinite( v ){ - return typeof v === 'number' && isFinite( v ); + return v + 0 === v && isFinite( v ); }; /** * NaN か?判定する。isNaN( 'NaN' ) === true に対策済。 @@ -119,7 +119,7 @@ X[ 'Type' ] = { */ 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( 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; @@ -144,7 +144,7 @@ X[ 'Type' ] = { * @alias X.Type.isUndefined */ function X_Type_isUndefined( v ){ - return v === void 0; + return v === undefined; }; console.log( 'X.Core.Type' );