相关疑难解决方法(0)

如何在Safari中更改console.log的默认行为?

在没有附加组件的Safari中,console.log将在最后执行状态下显示对象,而不是在console.log调用时的状态.

我必须克隆对象只是为了输出它console.log来获取该行的对象状态.

例:

var test = {a: true}
console.log(test); // {a: false}
test.a = false; 
console.log(test); // {a: false}
Run Code Online (Sandbox Code Playgroud)

javascript debugging console logging clone

144
推荐指数
4
解决办法
10万
查看次数

Chrome的JavaScript控制台是否懒于评估数组?

我将从代码开始:

var s = ["hi"];
console.log(s);
s[0] = "bye";
console.log(s);
Run Code Online (Sandbox Code Playgroud)

简单吧?对此,Firebug说:

["hi"]
["bye"]
Run Code Online (Sandbox Code Playgroud)

很棒,但Chrome的JavaScript控制台(7.0.517.41 beta)说:

["bye"]
["bye"]
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或者Chrome的JavaScript控制台在评估我的阵列方面特别懒惰?

在此输入图像描述

javascript arrays console logging google-chrome

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

对象和console.log的奇怪行为

这段代码:

foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ];
console.log('foo1', foo, foo.length);
foo.splice(2, 1);
console.log('foo2', foo, foo.length);
Run Code Online (Sandbox Code Playgroud)

在Chrome中生成以下输出:

foo1 
[Object, Object, Object, Object, Object]  5
    0: Object
    1: Object
    2: Object
    3: Object
    length: 4
    __proto__: Array[0]
     5 (index):23
foo2 
[Object, Object, Object, Object]  4
    0: Object
    1: Object
    2: Object
    3: Object
    length: 4
    __proto__: Array[0]
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/2kpnV/

这是为什么?

javascript google-chrome object

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

console.log()异步还是同步?

我目前正在阅读Trevor Burnham的Async Javascript.到目前为止,这是一本很棒的书.

他谈到这个片段和console.log在Safari和Chrome控制台中是"异步"的.不幸的是我不能复制这个.这是代码:

var obj = {}; 
console.log(obj); 
obj.foo = 'bar';
// my outcome: Object{}; 'bar';
// The book outcome: {foo:bar};
Run Code Online (Sandbox Code Playgroud)

如果这是异步,我会预期结果将成为书籍的结果.console.log()被放入事件队列中,直到执行完所有代码,然后运行它并具有bar属性.

虽然它正在同步运行但它似乎出现了.

我运行此代码错了吗?console.log实际上是异步吗?

javascript asynchronous

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

Google Chrome console.log()与对象和数组不一致

今天我正在帮助同事调试一些代码,我注意到console.log()谷歌Chrome中有一个奇怪的行为:

如果您:

  1. 创建一个嵌套数组(例如,[[345,"test"]])

  2. 使用将数组记录到控制台console.log().

  3. 修改其中一个内部数组值,然后console.log()输出后面的值 - 而不是console.log()执行时数组的值.

JavaScript:

var test = [[2345235345,"test"]]
console.log(test);
test[0][0] = 1111111;
// outputs: [[1111111,"test"]]

var testb = {};
testb.test = "test";
console.log(testb);
testb.test = "sdfgsdfg";
// outputs: {"testb":"test"}


var testc = ["test","test2"];
console.log(testc);
testc[0] = "sdxfsdf";
// outputs: ["test","test2"]
Run Code Online (Sandbox Code Playgroud)

JSFiddle示例

在Firefox中不会发生此行为.

另外需要注意的是,如果我在Chrome调试器中逐行浏览他的代码,那么console.log()会输出正确的值.

这个奇怪的现象是否有解释,还是仅仅是Google Chrome的错误?

编辑:

我已经缩小了重现不一致console.log()行为的步骤:

如果您将此脚本添加到您的页面:

var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
    greetings.push('goodbye');
},3000);
Run Code Online (Sandbox Code Playgroud)

并在Chrome 控制台窗口已打开的情况下在新窗口中打开它,然后console.log()输出将与在控制台窗口关闭时加载页面的输出不同.这是一个证明这一点的JSFiddle. …

javascript google-chrome google-chrome-devtools console.log

45
推荐指数
2
解决办法
9047
查看次数

为什么console.log()不对传递的变量进行快照?

今天我用javascript遇到了一些非常奇怪的行为.我想我现在已经弄明白了,但我想知道我认为发生的事情是否真的发生了,或者是否还有其他一些魔法.所以这是我的代码:

    var SomeObject = {};

    SomeObject.foo = function(a, b) {
       var baz = this.bar(a, b);
       console.log(baz);
       console.log(baz.left);
       SomeObject.magicalStuff(baz);
    };

    SomeObject.bar = function(a, b) {
        return {left: a-b, top: b-a};
    };

    SomeObject.magicalStuff = function(position) {
        position.left = 0;
    };

    SomeObject.foo(100, 50);
Run Code Online (Sandbox Code Playgroud)

jsFiddle的代码

这个输出类似于(取决于浏览器):

> Object
50
Run Code Online (Sandbox Code Playgroud)

如果您展开"对象"(在Chrome,Safari或Firefox(Firebug)中,您得到的是:

> Object
    left: 0
    top: -50
Run Code Online (Sandbox Code Playgroud)

我希望:

> Object
    left: 50
    top: -50
Run Code Online (Sandbox Code Playgroud)

我的想法是,console.log()实际上只是"发布"对控制台的引用,一旦你点击"展开"符号就会被读取.但是那种打败console.log()作为调试工具的目的不是那样吗?我总是希望console.log()能够"快照"我传递给它的东西.看到实际的console.log()改变了那个console.log()调用的输出之后的声明,真是令人惊讶.

或者还有其他事情发生了吗?

编辑:我也想知道浏览器开发人员是否有合理的理由来实现这样的console.log(我猜有一个,否则它在主流浏览器中不一致).

javascript debugging console

19
推荐指数
3
解决办法
4983
查看次数

element.children的console.log显示0长度,但稍后扩展时有三个条目

在我的javascript中,我有两个元素.

我记录了两个元素,它显示了......

要素1.

在此输入图像描述

要素2.

在此输入图像描述

有问题.

当我console.logelement小号.children他们显然还有些HtmlCollection小号

您将在一分钟内理解以下内容:但奇怪的是,一个HtmlCollection为空(并且长度为0),但有3个元素(并且长度为3).

如果您console.log为元素的孩子阅读下面的s,您将理解我在说什么...

元素1儿童和长度:

在此输入图像描述

元素2儿童和长度:(搞砸了)

在此输入图像描述

有谁知道这里发生了什么?

我如何解决这个问题,我需要通过HtmlCollection循环,但它不会让我因为长度是0 ...?

提前致谢!所有帮助赞赏.

html javascript htmlcollection

11
推荐指数
1
解决办法
5449
查看次数

Angular 8 组件中数据访问的奇怪之处

我正在开发一个处理 xml 文件并返回接口数据结构的服务。
起初我以为服务已经正确返回了所有数据,但后来我意识到一些不清楚的事情,特别是当我要读取组件中的数据结构时。
这是我的服务:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { AppConfig } from 'src/app/app.config';
import { forkJoin, Subscription } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class BibliographyParserService {

  private editionUrls = AppConfig.evtSettings.files.editionUrls || [];
  private bibliographicCitations: Array<BibliographicCitation> = [];
  private subscriptions: Array<Subscription> = [];

  constructor(
    private http: HttpClient,
  ) {
  }

  private getHttpCallsOBSStream() {
    return this.editionUrls.map((path) =>  this.http.get(path, { responseType: 'text'}));
  }

  public getBibliographicCitations(): Array<BibliographicCitation> {
    const parser = new …
Run Code Online (Sandbox Code Playgroud)

typescript angular angular8

6
推荐指数
1
解决办法
208
查看次数

Coffeescript/Javascript为什么克隆数组中的对象在传递给方法时似乎丢失了引用?

我正在使用克隆一个对象数组slice()但是当我将该克隆数组传递给另一个方法时,数组的内容正在丢失它们的引用并变为undefined.

class Chooser
  constructor: (@order, @items) ->
    # do stuff

  choose: ->
    console.debug "Choosing", @order.size, "from", @items.slice()
    @process(@order.size, @items.slice())
    # do stuff

  process: (count, items) ->
    console.debug "count", count
    console.debug "items", items
    console.debug "@items", @items
    # do recursive stuff that includes an items.shift()
Run Code Online (Sandbox Code Playgroud)

console.debug正如预期的那样,第一个给了我:

Choosing 10 items from [Item, Item]
Run Code Online (Sandbox Code Playgroud)

在哪里Item,Item正是我所期待的.

但接下来的console.debug行给了我

count 10
items [undefined x 2]
@items [Item, Item]
Run Code Online (Sandbox Code Playgroud)

据我所知,它@items.slice()创建了一个浅层副本@items,因此数组中的对象是对相同Item …

javascript arrays clone slice coffeescript

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

为什么控制台记录日志,注销已经分配为新分配的变量

我对Javascript有点陌生,想解决一些问题,我已经阅读了一些有关提升的内容,并认为这可能是回答我问题的原因和答案,但是为什么日志中却注销了对我常量的最后一个分配?

const people = [

    {
        name: "Roger",
        age: 29,
        role: "Secret Agent"
    }, 
    {
        name: "Jamie",
        age: 35,
        role: "Secret Agent"
    }
]

console.log("people", people);

people[0].name = 'bob';

console.log("people", people);
Run Code Online (Sandbox Code Playgroud)

两个结果都显示bob,而不是Roger,然后是Bob。

如果有人可以解释为什么会发生,那就太好了。

javascript ecmascript-6 console.log

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

在 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万
查看次数

在 React Navigation 5 中传递参数

我正在尝试在选项卡导航器之间传递一些参数。下面是我的程序的结构。粗体字为路线

应用程序(选项卡导航器):{(堆栈)和过滤器(屏幕)}

主要(堆栈导航器):{ Home(屏幕)和MediaDetails(屏幕)}

我在屏幕上有一个与Filter关联的按钮,它具有onPress()函数。我传递了一些参数(但为了解决这个问题,我们只考虑参数) 。

this.props.navigation.navigate('Home', {
    to: this.state.to,
}
Run Code Online (Sandbox Code Playgroud)

现在在与Home关联的屏幕中,我正在读取状态内的参数,如下所示:

state = {
    to: this.props.route.params.to
}
Run Code Online (Sandbox Code Playgroud)

在App.js内部,我将to的初始值设置为“2020”,如下所示:

<Stack.Screen 
    name="Home" 
    component={HomeScreen}                 
    initialParams={{
       to: '2020'
    }}
/>
Run Code Online (Sandbox Code Playgroud)

初始值确实设置为2020。我按下按钮。假设我设置1900 就在this.props.navigation.navigate执行之前,我console.log(this.state.to)该值,它确实更新为1900。但是,当屏幕更改为Home时,该值将恢复为2020(通过 console.log 观察到)

有人能指出这种怪异行为的原因吗?我已经尝试调试这个好几个小时了,但没有成功。React Navigation 5 也很新,所以在网上找不到类似的东西。任何帮助将不胜感激。感谢您一路以来的阅读。

编辑:问题已解决,完整代码已删除!

react-native react-navigation react-navigation-stack react-navigation-bottom-tab react-navigation-v5

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

如何解释vue.js中console.log()的这种奇怪行为?

当我使用第一个代码示例时,由于某种原因console.log()给了我已处理的HighData变量。好像console.log()在脚本的末尾。

console.log( "data", this.data['diagram'] );
var HighData = this.data['diagram'];

minSerieHeight = getMin( HighData[3] );
HighData[0] = mkSerie( HighData[0] );
HighData[1] = mkSerie( HighData[1] );
HighData[2] = mkSerie( HighData[2] );
HighData[3] = mkSerie( HighData[3] );
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,当我使用它array.map()(与上面的代码做完全相同的事情)时,它this.data['diagram']按预期正确地返回了变量。

console.log( "data", this.data['diagram'] );
var HighData = this.data['diagram'];

minSerieHeight = getMin( HighData[ HighData.length - 1 ] );
HighData = HighData.map( e => {
    return mkSerie( e );
});
Run Code Online (Sandbox Code Playgroud)

代码在mounted()函数的Vue组件中。该getMin()mkSerie()也都在mounted()功能。

javascript console.log vue.js google-developer-tools

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