我将从代码开始:
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控制台在评估我的阵列方面特别懒惰?
我目前正在阅读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实际上是异步吗?
我理解这段代码.我们制作A的副本并将其称为C.当A被更改时,C保持不变
var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1
Run Code Online (Sandbox Code Playgroud)
但是当A是阵列时,我们会有不同的情况.C不仅会改变,而且会在我们触及A之前发生变化
var A = [2, 1];
var C = A;
console.log(C); // [1, 2]
A.sort();
console.log(C); // [1, 2]
Run Code Online (Sandbox Code Playgroud)
有人可以解释第二个例子中发生的事情吗?
在我的javascript中,我有两个元素.
我记录了两个元素,它显示了......
要素1.
要素2.
有问题.
当我console.log的element小号.children他们显然还有些HtmlCollection小号
您将在一分钟内理解以下内容:但奇怪的是,一个HtmlCollection为空(并且长度为0),但有3个元素(并且长度为3).
如果您console.log为元素的孩子阅读下面的s,您将理解我在说什么...
元素1儿童和长度:
元素2儿童和长度:(搞砸了)
有谁知道这里发生了什么?
我如何解决这个问题,我需要通过HtmlCollection循环,但它不会让我因为长度是0 ...?
提前致谢!所有帮助赞赏.
我是JavaScript的新手,我认为对象是通过引用传递的。
我期望的输出是:
{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }
Run Code Online (Sandbox Code Playgroud)
获得的输出:
{ one: 1 } { one: 1 }
{ two: 2 } { one: 1 }
Run Code Online (Sandbox Code Playgroud)
什么时候b引用地址a,为什么b还{ one: 1 }
{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }
Run Code Online (Sandbox Code Playgroud)
当我使用第一个代码示例时,由于某种原因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()功能。
我有一个对象,其中一个数组(类对象)作为其值之一。我有一个函数,部分地在该数组内(对象内)的对象之一上运行类方法。
当我运行代码时,在函数之前和之后打印数组,更改在函数运行之前和之后都存在。
为什么会发生这种情况?吊装?
作为测试,我在对象中创建了另一个键:值对,使得该值是一个整数,并将我的函数更改为将该整数增加 1。在这里,它工作正常 - 在函数之前打印我的对象整数为1,然后整数为2。
我也尝试不使用对象上的类方法来进行调整,但仍然失败。
class Book{
constructor (color, title, pagecount){
this.color = color;
this.title = title;
this.pagecount = pagecount;
}
changePages() {
this.pagecount += 50;
}
}
let book1 = new Book("Red", "Book1", 100);
let book2 = new Book("Blue", "Book2", 200);
let book3 = new Book("Green", "Book3", 300);
var myBookArr = [book1, book2, book3]
var myObj = {arr: myBookArr, integerTest: 0}
function thisDoesStuff(){
//other operations not related to myObj
myObj.arr[0].changePages();
}
Run Code Online (Sandbox Code Playgroud)
当我在两个 console.logs 中运行以下命令时,它显示 arr[0] (即 …
我有一个关于 js 循环及其实际工作原理的问题。我正在循环访问如下所示的对象数组:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
Run Code Online (Sandbox Code Playgroud)
循环只是更新每个元素的值:
array.forEach(el => {
el.value = 1;
console.log(array)
})
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么输出看起来像这样:
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
[{value: 1}, {value: 0}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: …Run Code Online (Sandbox Code Playgroud) javascript ×8
arrays ×2
asynchronous ×1
console ×1
console.log ×1
foreach ×1
html ×1
logging ×1
loops ×1
object ×1
variables ×1
vue.js ×1