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; } ?>javascript - Why does console.log wrongly print an empty array? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Why does console.log wrongly print an empty array? - Stack Overflow

programmeradmin4浏览0评论

I use Firefox.

This code logs [].

var log = console.log;

function new_b(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }
    return res;
}

var b = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_b(b);

This code logs the correct value.

var log = console.log;

function new_b(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    // note that I ment this out.
    /*for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }*/
    return res;
}

var b = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_b(b);

Why is this happening?

I use Firefox.

This code logs [].

var log = console.log;

function new_b(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }
    return res;
}

var b = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_b(b);

This code logs the correct value.

var log = console.log;

function new_b(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    // note that I ment this out.
    /*for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }*/
    return res;
}

var b = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_b(b);

Why is this happening?

Share Improve this question asked Aug 14, 2013 at 11:44 batmanbatman 5,39014 gold badges56 silver badges87 bronze badges 4
  • 1 Not your question, but you should prefer something like var log = console.log.bind(console); to keep context – Paul S. Commented Aug 14, 2013 at 11:46
  • 1 Or better yet, with console.log or any other host-provided function: function log(msg) { return console.log(msg); } Host-provided functions can be (and are allowed to be) very squirrelly indeed. They're not guaranteed to have bind, and they're not guaranteed to work correctly when called via other references than their normative one. – T.J. Crowder Commented Aug 14, 2013 at 11:47
  • @T.J.Crowder, What are host provided functions? – batman Commented Aug 14, 2013 at 11:53
  • @learner: Anything you don't see in the JavaScript specification. So console's various functions, alert, prompt, confirm, all the DOM functions, ... – T.J. Crowder Commented Aug 14, 2013 at 11:54
Add a ment  | 

2 Answers 2

Reset to default 14

console.log shows live data, not a snapshot of the object at the time you run it.

Since you splice all the data out of the array, it is empty almost as soon as you log it.

Stringify or deep copy the array if you want to log a snapshot of it.

If you log objects in the latest versions of Chrome and Firefox, what you get logged on the console is a reference to the object, which is not necessarily the 'value' of the object at the moment in time you call console.log(), but it is the value of the object at the moment you open the console.

发布评论

评论列表(0)

  1. 暂无评论