相关疑难解决方法(0)

console.log中的错误?

可能重复:
Chrome的JavaScript控制台是否懒于评估数组?

我尝试以下代码:

var myList = new Object();
var item   = new Object();
item.text  = "item-1";
myList[3]  = item;

console.log(myList);
console.log(myList[3].text);

// Assign another object to the same entry
var item2   = new Object();
item2.text  = "item-2";
myList[3]  = item2;

console.log(myList);
console.log(myList[3].text);
Run Code Online (Sandbox Code Playgroud)

结果很奇怪:

* Object
  * 3: Object
      text: "item-2"

item-1

* Object
  * 3: Object
      text: "item-2"

item-2
Run Code Online (Sandbox Code Playgroud)

但是 - 如果我在一段时间后执行第二部分(使用setTimeout),并展开第一个对象,我说得对,即:

* Object
  * 3: Object
      text: "item-1"

item-1

* Object
  * 3: Object
      text: "item-2"

item-2
Run Code Online (Sandbox Code Playgroud)

我发现分享它很重要,因为我认为可以浪费大量时间来试图理解他的代码中的错误.如果有人提到一个开放的bug或其他东西 - …

javascript console firefox google-chrome javascript-debugger

5
推荐指数
2
解决办法
1936
查看次数

Javascript数组删除或弹出导致与console.log的竞争条件?

在当前的Google Chrome(版本22.0.1229.79,在带有Mountain Lion的iMac上)上,代码如下

var arr = [1, 3, 5];
console.log(arr);

delete arr[1];
console.log(arr);

console.log(arr.pop());
console.log(arr);
Run Code Online (Sandbox Code Playgroud)

将会呈现

[1, undefined × 2] 
[1, undefined × 2] 
5 
[1, undefined × 1] 
Run Code Online (Sandbox Code Playgroud)

还有其他情况导致Firefox的行为也相似.它们是Chrome和Firefox上的漏洞 - 但Firefox和Chrome都容易受到类似错误的影响似乎很奇怪 - 或者它是否与数组删除有关console.log?据说,console.log不应该在单独的线程上运行.

javascript

5
推荐指数
1
解决办法
368
查看次数

为什么Chrome显示一个值,因为它已经从数组中删除了?

可能重复:
Chrome的JavaScript控制台是否懒于评估数组?

Chrome的js控制台在删除值之前显示一个删除值的数组.为什么?

jsFiddle演示了这种行为.

var list=[];
list.push("one");
list.push("two");
list.push("three");
console.log(list);                        //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"]

list.shift();

$("#output").append($("<br>"));

console.log(list);                        //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"]
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-devtools

5
推荐指数
1
解决办法
111
查看次数

新的Google Chrome控制台无法区分更新的已记录对象

我正在运行23.0.1271.64版

其中一个上次更新更新了Google Chrome中的Web开发人员视图.

许多功能都很不错,但是对控制台的更新似乎被打破了.

如果你有一个对象

var object = {'one':true, 'two':false}
Run Code Online (Sandbox Code Playgroud)

console.log(object)

然后对对象进行更改

object.one = false
Run Code Online (Sandbox Code Playgroud)

console.log(object)再次(click事件后说)

更改不会反映出来,控制台只会递增对象名称旁边的计数器.

这是一个错误还是一个新的"功能"?旧控制台将反映对象更新.

console webkit google-chrome

5
推荐指数
0
解决办法
134
查看次数

Array.from 返回空数组

我正在尝试过滤 div 元素的子元素。

我可以通过 Angular ViewChild 直接访问父级 div,如果我像这样打印子级

console.log(this.myParentDiv.nativeElement.children);
Run Code Online (Sandbox Code Playgroud)

我在 Chrome 中得到以下输出:

在此输入图像描述

我需要将其转换为数组才能过滤 div。但是如果我像这样转换它

console.log(Array.from(this.myParentDiv.nativeElement.children));
Run Code Online (Sandbox Code Playgroud)

它返回一个空数组。

知道为什么它返回空吗?

javascript angular

5
推荐指数
1
解决办法
3958
查看次数

哪个先被调用?构造函数或 componentDidMount 或 Render

正如我在网上和官方文档中阅读的那样。顺序是 Constructor-> ComponentWillMount -> Render -> ComponentDidMount 等。

class Navigation extends Component {
    constructor(props) {
        super(props);
        console.log('constructor', this);
        this.state = { items: [ ] };
    }

componentDidMount() {
    console.log('componentDidMount');

    if ( toDisplay( ) ) {
        api.bringCats()
        .then( categories => {
            const tot_cat = categories.map( cat => { return {name: cat.name, link: cat.link}; })
            this.setState({items: tot_cat,})
        })
    }
}

render() { 
    console.log("render")
    //some stuff
}
}
Run Code Online (Sandbox Code Playgroud)

我希望日志按此顺序 1. 构造函数 2. ComponentDidMount 3. 渲染

this使用 constructor 内部构造函数方法进行日志记录。我能够获得价值,items因为componentDidMount …

javascript ecmascript-6 reactjs babeljs

5
推荐指数
1
解决办法
2148
查看次数

JavaScript:console.log()给出的结果与alert()不同

console.log()是否应该在JavaScript中调用时打印出变量的值?这是我的假设,但当我在Firefox(使用Firebug)或谷歌Chrome(并使用内置的开发工具)中运行下面的代码时,我似乎得到了数组的"最终"值,而不是当时的数组.如果我使用alert()语句,它们会打印出我期望的内容 - 调用alert()语句时数组的值.

var params = new Array();
var tmp = new Array('apple', 'banana', 'cat');

for (var i=0; i < tmp.length; i++) {
    params[tmp[i]] = [];
}

console.log(params);
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:
[banana]:
[cat]:
*/

console.log('===========================================');

var tmp2 = new Array('jan', 'feb', 'mar', 'apr');
for (var i=0; i < tmp.length; i++) …
Run Code Online (Sandbox Code Playgroud)

javascript

4
推荐指数
1
解决办法
1528
查看次数

在 Javascript 中反转对象数组

正如标题所说,我想反转由 Javascript 中的对象组成的数组。

例子 : var x = [{"score":1},{"score":2},{"score":3}]

为此,我使用了 .reverse() 方法。

现在,假设我写了这段代码

console.log(x);
x.reverse();
console.log(x);
Run Code Online (Sandbox Code Playgroud)

我希望控制台以原始顺序显示数组,然后以相反的顺序显示。但是,它确实以相反的顺序显示了两个数组。

怎么来的 ?

javascript arrays object

4
推荐指数
2
解决办法
1万
查看次数

如何在JavaScript中交换2D数组中的两个元素?(对我在Chrome中的console.log中看到的内容感到困惑)

我想在2D数组中交换两个数组,但JS似乎在我的实际交换发生之前就这样做了.

这是我正在研究的算法,提供了显示点列表的每种可能方法.我已经尝试了几种方法来做到这一点,但关键问题一直在回归,我已经成功地将其简化为代码的平衡:

var points = [[1,2],[10,20],[100,200]];
console.log(points);
var a = points[1][0];
var b = points[1][1];
points[1][0] = points[2][0];
points[1][1] = points[2][1];
points[2][0] = a;
points[2][1] = b;
console.log(points);
Run Code Online (Sandbox Code Playgroud)

我知道这段代码并不接近DRY,但是它也有同样的问题:声明后,行中的"点"被记录到控制台中,虽然在该日志中,它已经被交换了?这怎么可能,因为还没有命令说它这样做.JavaScript如何处理这种代码的和平?为什么我的工作似乎没有?

**第一个日志的预期输出是:[[1,2],[10,20],[100,200]]**和第二个日志:[[1,2],[100,200],[10, 20]

StackOverFlow snipped按预期运行它,但Chrome运行它的方式不同

javascript arrays google-chrome lazy-evaluation console.log

4
推荐指数
1
解决办法
93
查看次数

为什么console.log在分配之前会记录一个值?

一个简短的例子:

self.curTabs = null;

$j.getJSON(url)
    .done(function (response) {
        self.curTabs = response.tabs;

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = true;
        });

        console.log(self.curTabs);
    });
Run Code Online (Sandbox Code Playgroud)

逻辑输出:[ 0: Object { dataLoaded: true, etc... }, 1: etc... ].

但是这个例子:

self.curTabs = null;

$j.getJSON(url)
    .done(function (response) {
        self.curTabs = response.tabs;

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = true;
        });

        console.log(self.curTabs);

        _.each(self.curTabs, function (tab) {
            tab.dataLoaded = false;
        });
    });
Run Code Online (Sandbox Code Playgroud)

不合逻辑的输出:[ 0: Object { dataLoaded: false, etc... }, 1: etc... ].

为什么变量在赋值false之前得到了值?

javascript

3
推荐指数
1
解决办法
65
查看次数