我尝试以下代码:
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
在当前的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不应该在单独的线程上运行.
Chrome的js控制台在删除值之前显示一个删除值的数组.为什么?
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)
我正在运行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事件后说)
更改不会反映出来,控制台只会递增对象名称旁边的计数器.
这是一个错误还是一个新的"功能"?旧控制台将反映对象更新.
我正在尝试过滤 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)
它返回一个空数组。
知道为什么它返回空吗?
正如我在网上和官方文档中阅读的那样。顺序是 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 …
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 中的对象组成的数组。
例子 : var x = [{"score":1},{"score":2},{"score":3}]
为此,我使用了 .reverse() 方法。
现在,假设我写了这段代码
console.log(x);
x.reverse();
console.log(x);
Run Code Online (Sandbox Code Playgroud)
我希望控制台以原始顺序显示数组,然后以相反的顺序显示。但是,它确实以相反的顺序显示了两个数组。
怎么来的 ?
我想在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运行它的方式不同
一个简短的例子:
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 ×9
arrays ×2
console ×2
angular ×1
babeljs ×1
console.log ×1
ecmascript-6 ×1
firefox ×1
object ×1
reactjs ×1
webkit ×1