te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>How do you check if a JavaScript object is directly an `{}` instance, not a subclass? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How do you check if a JavaScript object is directly an `{}` instance, not a subclass? - Stack Overflow

programmeradmin3浏览0评论

I have spent 10 or 20 minutes here and there probably a dozen times in the past year and never found a bulletproof answer to this question.

How do you check if a JavaScript object is an instance of Object, not a subclass?

One use case for this is to check if arguments[0] is an "options" hash vs. a "model" (MVC), both of which extend the native Object, but which should be treated differently.

I have tried these:

// some helper to get constructor name
function klassName(fn) {
  if (fn.__name__) {
    return fn.__name__;
  }
  if (fn.name) {
    return fn.name;
  }
  return fn.toString().match(/\W*function\s+([\w\$]+)\(/));
};

var Model = function() {};

m = new Model;
o = {};

Object(o) === o; // true
Object(m) === m; // true, thought it might be false

klassName(o.constructor); // Object
klassName(m.constructor); // Model

That klassName(m.constructor) doesn't work in some cases (can't remember exactly, but maybe a regex.constructor, something like that). Maybe it does, don't know for sure.

Is there a bulletproof way to tell if something is an {} object?

I have spent 10 or 20 minutes here and there probably a dozen times in the past year and never found a bulletproof answer to this question.

How do you check if a JavaScript object is an instance of Object, not a subclass?

One use case for this is to check if arguments[0] is an "options" hash vs. a "model" (MVC), both of which extend the native Object, but which should be treated differently.

I have tried these:

// some helper to get constructor name
function klassName(fn) {
  if (fn.__name__) {
    return fn.__name__;
  }
  if (fn.name) {
    return fn.name;
  }
  return fn.toString().match(/\W*function\s+([\w\$]+)\(/));
};

var Model = function() {};

m = new Model;
o = {};

Object(o) === o; // true
Object(m) === m; // true, thought it might be false

klassName(o.constructor); // Object
klassName(m.constructor); // Model

That klassName(m.constructor) doesn't work in some cases (can't remember exactly, but maybe a regex.constructor, something like that). Maybe it does, don't know for sure.

Is there a bulletproof way to tell if something is an {} object?

Share Improve this question asked Apr 25, 2012 at 23:05 Lance PollardLance Pollard 79.4k98 gold badges330 silver badges606 bronze badges 2
  • 1 In JavaScript nothing is bulletproof. Not even the Bulletproof function itself. :) – Kendall Frey Commented Apr 25, 2012 at 23:27
  • 1 BTW - JavaScript does not have a subclass per-se. Only constructor functions and prototypes. – gnarf Commented Apr 25, 2012 at 23:58
Add a ment  | 

3 Answers 3

Reset to default 12

Might something as simple as

function isObj( test ) {
    return test.constructor === Object;
}

Be what you are looking for?

Test in jsFiddle

You mean this? http://jsfiddle/elclanrs/ukEEw/

var o = {};
var re = /\d/;
var f = function(){};
var d = new Date();

var isObj = function(e){
    return e.toString() === '[object Object]';
};

console.log( isObj(o) ); // True
console.log( isObj(re) ); // False
console.log( isObj(f) ); // False
console.log( isObj(d) ); // False

I would just change one thing

var isObj = function(e){
    if(!e) return false; // change this line
    return e.toString() === '[object Object]';
};
发布评论

评论列表(0)

  1. 暂无评论