に建てられました。
このようにして、new String('x')
またはnull
または/regex/
(Chrome版)の予期しない値が含まれます。
var type = (function() {
var toString = Object.prototype.toString,
typeof_res = {
'undefined': 'undefined',
'string': 'string',
'number': 'number',
'boolean': 'boolean',
'function': 'function'
},
tostring_res = {
'[object Array]': 'array',
'[object Arguments]': 'arguments',
'[object Function]': 'function',
'[object RegExp]': 'regexp',
'[object Date]': 'date',
'[object Null]': 'null',
'[object Error]': 'error',
'[object Math]': 'math',
'[object JSON]': 'json',
'[object Number]': 'number',
'[object String]': 'string',
'[object Boolean]': 'boolean',
'[object Undefined]': 'undefined'
};
return function type(x) {
var the_type = typeof_res[typeof x];
return the_type && (the_type !== 'function' || (x.apply && x.call)) ?
the_type :
tostring_res[toString.call(x)] || (x ? 'object' : 'null');
};
})();
type(new String('test')); // string
type(function(){}); // function
type(null); // null
type(/regex/); // regexp
EDIT:私はちょうど書き換えを行って、そして機能の重要な部分を削除していました。一定。
以上のコンパクト版のため:
var type = (function() {
var i, lc, toString = Object.prototype.toString,
typeof_res = {},
tostring_res = {},
types = 'Undefined,String,Number,Boolean,Function,Array,Arguments,RegExp,Date,Null,Error,Math,JSON'.split(',');
for (i = 0; i < types.length; i++) {
lc = types[i].toLowerCase();
if (i < 5) typeof_res[lc] = lc;
tostring_res['[object ' + types[i] + ']'] = lc;
}
return function type(x) {
var the_type = typeof_res[typeof x];
return the_type && (the_type !== 'function' || (x.apply && x.call)) ?
the_type :
tostring_res[toString.call(x)] || (x ? 'object' : 'null');
};
})();
我々はC:あなたは、このいくつかのバリエーションを行うことができますあなたが本当に解決しようとしている問題を記述したならば、おそらく助けになるでしょう。 – jfriend00