Javascript 为什么在访问由getElementsByTagName生成的节点列表的数值属性时得到0(零)?

Javascript 为什么在访问由getElementsByTagName生成的节点列表的数值属性时得到0(零)?,javascript,dom,nodelist,Javascript,Dom,Nodelist,为什么我不能获得任何数值属性 我的代码如下: var img = document.getElementsByTagName("img"); console.log( "\'img[0].namespaceURI\' results in " + img[0].namespaceURI ); console.log( "\'img[0].height\' results in " + img[0].height ); console

为什么我不能获得任何数值属性

我的代码如下:

var img = document.getElementsByTagName("img");  
console.log( "\'img[0].namespaceURI\' results in " + img[0].namespaceURI );
console.log( "\'img[0].height\' results in " + img[0].height );
console.log(img);
弦起作用。但是没有一个数值

见图片

控制台中DOM元素的大纲反映了当您单击箭头以显示大纲时的状态(根据浏览器的版本,在大纲打开时DOM更改时,其内容也会更新)<代码>控制台日志(img)日志引用元素,而不是调用
console.log(img)时元素的状态

img[0]的
console.log
。height
显示您进行日志记录时图像的
height
值,因为您直接请求
height
,而且它是一个原始值。因此,如果此时未加载图像,则调用
console.log(img[0].height)
时显示的
height
0

您需要等待图像加载后才能获得其计算值


console.log
/
console.dir
的这种行为对于所有非原语都是相同的。对象、阵列、家庭元素。。。作为对控制台的引用传递。字符串、数字、布尔值按值传递到控制台输出。

很可能图像尚未完全加载。使用
onload
处理程序

var img = document.getElementsByTagName("img")[0];  
img.onload = function() {
    console.log( "\'img[0].namespaceURI\' results in " + this.namespaceURI );
    console.log( "\'img[0].height\' results in " + this.height );
    console.log(this);
};
如果可能缓存了图像,则可以检查其
.complete
属性,并在需要时手动调用处理程序

if (img.complete) 
    img.onload();

在Firefox 26和Chrome中对我来说效果很好32@t.niese这是一个很好的解释!但将这一点作为答案也有一个解决方法。顺便说一句,我必须执行
img[0]。onload
才能让它工作。谢谢大家的帮助!是的,很抱歉我没有注意到您正在使用
.getElementsByTagName()