Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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 处理图像对象_Javascript_Image - Fatal编程技术网

Javascript 处理图像对象

Javascript 处理图像对象,javascript,image,Javascript,Image,在javascript中创建新的图像元素时,Google Chrome的内存工具(开发者工具>时间线>内存)自然会将其视为一个新的DOM元素 在我的例子中,我得到了1500多个DOM元素,我希望去掉它们。我尝试将所有对象保存在数组中,并在准备创建所有对象时在循环中删除所有对象,导致以下错误: uncaughttypeerror:无法调用null的方法“removeChild” 表示图像对象未出现在实际DOM中 var images = []; var i, image; for( i = 0;

在javascript中创建新的图像元素时,Google Chrome的内存工具(开发者工具>时间线>内存)自然会将其视为一个新的DOM元素

在我的例子中,我得到了1500多个DOM元素,我希望去掉它们。我尝试将所有对象保存在数组中,并在准备创建所有对象时在循环中删除所有对象,导致以下错误:

uncaughttypeerror:无法调用null的方法“removeChild”

表示图像对象未出现在实际DOM中

var images = [];
var i, image;

for( i = 0; i < urls.length; i++ ) {
    image = new Image();
    image.src = urls[i];
}

// other stuff happens

for( i = 0; i < images.length; i++ ) {
    // apparently this doesn't work because I'm not adding the image to my DOM
    // images[i].parentNode.removeChild( images[i] );

    // delete images
}
var-images=[];
varⅠ,图像;
对于(i=0;i

是否有方法移除/删除/取消设置/处置图像对象?

如果不将它们添加到DOM中(如使用
将子对象添加到父对象),则
移除子对象
是无用的。图像对象仅在内存中


要处理内存中的项,只需删除对这些对象的引用(如将引用变量设置为null),其余的工作将由垃圾收集完成。如果不能将它们全部空值,它们将不会被GC’ed。

我认为唯一的方法是这样做:

for( i = 0; i < images.length; i++ ) 
  images[i] = null;
}

// or just 
images = null;
for(i=0;i
AFAIK,分配
null
应该会清除它:
images[i]=null
设置
images=null
将删除代码中对对象的引用。然而,为了实现其
load
事件,Chrome必须有自己的对象内部引用

也就是说,您可以编写如下代码:

for( i = 0; i < urls.length; i++ ) { 
    image = new Image(); 
    image.src = urls[i]; 
    image.onload = function(){alert('Test');};
    image = null;
} 

为了摆脱“naivists”对chrome和specilly IE和EDGE的描述。 您可以将图像源更改为空,使其占用零内存

image.src = '';
image = null;

谢谢我知道你的答案是最后一个,但你确实做了一些研究。这是修复了还是仍然是一个bug?它不是bug!您添加了一个侦听器,但没有删除它。通过执行“image=null”,您只是删除了这个具体的引用。对象仍然存在于内存中,尽管没有对它的引用。要让GS释放它,您必须通过“image.onload=null”删除该事件@shal绝对正确。不是虫子!你只需要在自己完全清理干净后,让垃圾收集器完成它的工作!有时说起来容易做起来难!)好奇的是,如果你将对象设为空,那么在GC'd之后,从技术上来说,它是否仍然会删除从
图像
中分配的内存?
image.src = '';
image = null;