Javascript 从page.evaluate返回的数组出现异常行为
假设我们有这样一个脚本:Javascript 从page.evaluate返回的数组出现异常行为,javascript,phantomjs,Javascript,Phantomjs,假设我们有这样一个脚本: var webPage=require('webPage'); var page=webPage.create(); 第页打开('http://google.com,功能(状态){ var ar=page.evaluate(函数(){ //执行一些神奇的计算并返回此数组: 返回[{x:1,y:10},{x:2,y:20}]; }); //更改内部的对象 对于(变量i=0;i
var webPage=require('webPage');
var page=webPage.create();
第页打开('http://google.com,功能(状态){
var ar=page.evaluate(函数(){
//执行一些神奇的计算并返回此数组:
返回[{x:1,y:10},{x:2,y:20}];
});
//更改内部的对象
对于(变量i=0;i
结果将是:
1 10
2 20
我通过将ar
复制到新的数组对象中解决了这个问题:
var webPage=require('webPage');
var page=webPage.create();
第页打开('http://google.com,功能(状态){
var ar=page.evaluate(函数(){
//执行一些神奇的计算并返回此数组:
返回[{x:1,y:10},{x:2,y:20}];
});
//浅拷贝到新数组中
ar=ar.slice(0);
对于(变量i=0;i
结果是:
changed 1
changed 2
但我的问题是为什么会这样
我使用的是phantomjs 1.9.8。这个问题是在年以前提出的。从页面上下文返回的对象/数组的不变性似乎是: 我认为这是一种“QVariant”行为:返回的对象是不可变的。 我不明白为什么,也没有明确的记录 本期还包含一些将不可变对象转换为普通对象的变通方法,如下所示:
result = JSON.parse(JSON.stringify(result));
在使用结果或本文件之前:
var resultStr = page.evaluate(function() {
return JSON.stringify(result);
});
var result = JSON.parse(resultStr);
非常感谢。我在GitHub上没有发现这个打开的bug。