Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从page.evaluate返回的数组出现异常行为_Javascript_Phantomjs - Fatal编程技术网

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。