繁体   English   中英

JavaScript for / in循环中出现意外输出

[英]JavaScript for/in loop with unexpected output

我不确定为什么为什么输出的document对象的属性名称undefined 我认为这与变量表达式myArray[i++] 我可以将其设置为简单的原始变量,然后获取所有属性名称,但我希望将所有属性名称保存到数组中。 提前谢谢你的帮助!!

var myArray = [];
var i = 0;
for (myArray[i++] in document) {
document.write(myArray[i] + "</br>");
}

因为你增加它不工作, i设置后myArray[i]myArray[i++]后递增)。

尽管我不确定您为什么需要这样做,但这将起作用。

var myArray = [];
var i = 0;
for (myArray[i] in document) {
    console.log(myArray[i++] + "</br>");
}

之所以发生这种情况,是因为自从后递增i以来,您总是在数组中看起来比定义的要远。 您可以预先增加:

var myArray = [];
var i = -1;
for (myArray[++i] in document) {
    document.write(myArray[i] + "</br>");
}

JSFiddle

“我希望将所有属性名称保存到数组中。”

您可以这样做:

var names = Object.getOwnPropertyNames(document);

之所以使用Object.getOwnPropertyNames()是因为它包含不可枚举的属性,而for-in将跳过它们。

但是某些属性是继承的,因此,如果需要的话,您需要对原型链中的所有对象执行相同的操作。

var obj = document;
var names = [];

do {
    names.push.apply(names, Object.getOwnPropertyNames(obj));
} while(obj = Object.getPrototypeOf(obj));

结果在Firefox中:

[“ jQuery17104169501299363202”,“位置”,“ addEventListener”,“ removeEventListener”,“ dispatchEvent”,“ getElementsByName”,“ getItems”,“ open”,“ close”,“ write”,“ writeln”,“ execCommand”,“ queryCommandEnabled”,“ queryCommandIndeterm”,“ queryCommandState”,“ queryCommandSupported”,“ queryCommandValue”,“ clear”,“ getSelection”,“ captureEvents”,“ releaseEvents”,“ routeEvent”,“ domain”,“ cookie”,“ body” ,“ head”,“ images”,“ embeds”,“ plugins”,“ links”,“ forms”,“ scripts”,“ designMode”,“ fgColor”,“ linkColor”,“ vlinkColor”,“ alinkColor”,“ bgColor”,“锚”,“ applets”,“ onreadystatechange”,“ onmouseenter”,“ onmouseleave”,“ getElementsByTagName”,“ getElementsByTagNameNS”,“ getElementsByClassName”,“ getElementById”,“ createElement”,“ createElementNS”,“ createDocumentFragment” ,“ createTextNode”,“ createComment”,“ createProcessingInstruction”,“ importNode”,“ adoptNode”,“ createEvent”,“ createRange”,“ createNodeIterator”,“ createTreeWalker”,“ createCDATASection”,“ createAttribute”,“ createAttribu teNS”,“ hasFocus”,“ releaseCapture”,“ mozSetImageElement”,“ mozCancelFullScreen”,“ mozExitPointerLock”,“ enableStyleSheetsForSet”,“ elementFromPoint”,“ querySelector”,“ querySelectorAll”,“ getAnonymousNodes”,“ getAnonymousElementByAttribute” ,“ removeBinding”,“ getBindingParent”,“ loadBindingDocument”,“ createExpression”,“ createNSResolver”,“ evaluate”,“ implementation”,“ URL”,“ documentURI”,“ compatMode”,“ characterSet”,“ contentType”,“ doctype”,“ documentElement”,“ inputEncoding”,“ referrer”,“ lastModified”,“ readyState”,“ title”,“ dir”,“ defaultView”,“ activeElement”,“ currentScript”,“ mozFullScreenEnabled”,“ mozFullScreenElement” ,“ mozFullScreen”,“ mozPointerLockElement”,“隐藏”,“ mozHidden”,“ visibilityState”,“ mozVisibilityState”,“ styleSheets”,“ selectedStyleSheetSet”,“ lastStyleSheetSet”,“ preferredStyleSheetSet”,“ styleSheetSets”,“ hasChildNodes”, insertBefore”,“ appendChild”,“ replaceChild”,“ removeChild”,“ normalize”,“ cloneNode”,“ isEqualNode”,“ compareDocum” entPosition”,“包含”,“ lookupPrefix”,“ lookupNamespaceURI”,“ isDefaultNamespace”,“ isSupported”,“ hasAttributes”,“ setUserData”,“ getUserData”,“ nodeType”,“ nodeName”,“ baseURI”,“ ownerDocument” ,“ parentNode”,“ parentElement”,“ childNodes”,“ firstChild”,“ lastChild”,“ previousSibling”,“ nextSibling”,“ nodeValue”,“ textContent”,“ attributes”,“ namespaceURI”,“ prefix”,“ localName”,“ lookupGetter ”,“ lookupSetter ”,“ defineGetter ”,“ defineSetter ”,“ QueryInterface”,“ mozSyntheticDocument”,“ caretPositionFromPoint”,“ ELEMENT_NODE”,“ ATTRIBUTE_NODE”,“ TEXT_NODE”,“ CDATA_SECTION_NODE”,“ ENTITY_REFER” ,“ ENTITY_NODE”,“ PROCESSING_INSTRUCTION_NODE”,“ COMMENT_NODE”,“ DOCUMENT_NODE”,“ DOCUMENT_TYPE_NODE”,“ DOCUMENT_FRAGMENT_NODE”,“ NOTATION_NODE”,“ DOCUMENT_POSITION_DISCONNECTED”,“ DOCUMENT_POSITION”,“ DOCUMENT_POSITION” DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC”,“位置”,“ onabort”,“ onblur” ”,“ oncanplay”,“ oncanplaythrough”,“ onchange”,“ onclick”,“ oncontextmenu”,“ ondblclick”,“ ondrag”,“ ondragend”,“ ondragenter”,“ ondragleave”,“ ondragover”,“ ondragstart”, “ ondrop”,“ ondurationchange”,“ onemptied”,“ onended”,“ onerror”,“ onfocus”,“ oninput”,“ oninvalid”,“ onkeydown”,“ onkeypress”,“ onkeyup”,“ onload”,“ onloadeddata” ”,“ onloadedmetadata”,“ onloadstart”,“ onmousedown”,“ onmousemove”,“ onmouseout”,“ onmouseover”,“ onmouseup”,“ onmozfullscreenchange”,“ onmozfullscreenerror”,“ onmozpointerlockchange”,“ onmozpointerlockerror”,“ onpause”, “进行中”,“进行中”,“进行中”,“ onratechange”,“重置”,“ onscroll”,“ onseeked”,“ onseeking”,“ onselect”,“ onshow”,“安装”,“ onsubmit”,“ onsupend” ”,“ ontimeupdate”,“ onvolumechange”,“ onwaiting”,“ onwheel”,“ oncopy”,“ oncut”,“ onpaste”,“ onbeforescriptexecute”,“ onafterscriptexecute”,“ getElementsByTagName”,“ getElementsByTagNameNS”,“ getElementsByClassName”, “ getElementById”,“ createElement”,“ createElementNS”,“ createDocumentFra gment”,“ createTextNode”,“ createComment”,“ createProcessingInstruction”,“ importNode”,“ adoptNode”,“ createEvent”,“ createRange”,“ createNodeIterator”,“ createTreeWalker”,“ createCDATASection”,“ createAttribute”,“ createAttributeNS” ,“ hasFocus”,“ releaseCapture”,“ mozSetImageElement”,“ mozCancelFullScreen”,“ mozExitPointerLock”,“ enableStyleSheetsForSet”,“ elementFromPoint”,“ querySelector”,“ querySelectorAll”,“ getAnonymousNodes”,“ getAnonymousElementByAttribute”,“ addBinding” removeBinding”,“ getBindingParent”,“ loadBindingDocument”,“ createExpression”,“ createNSResolver”,“ evaluate”,“ implementation”,“ URL”,“ documentURI”,“ compatMode”,“ characterSet”,“ contentType”,“ doctype” ,“ documentElement”,“ inputEncoding”,“ referrer”,“ lastModified”,“ readyState”,“ title”,“ dir”,“ defaultView”,“ activeElement”,“ onabort”,“ onblur”,“ oncanplay”,“ oncanplaythrough”,“ onchange”,“ onclick”,“ oncontextmenu”,“ ondblclick”,“ ondrag”,“ ondragend”,“ ondragenter”,“ ondragleave”,“ ondragover”,“ ondra” gstart”,“ ondrop”,“ ondurationchange”,“ onemptied”,“ onended”,“ onerror”,“ onfocus”,“ oninput”,“ oninvalid”,“ onkeydown”,“ onkeypress”,“ onkeyup”,“ onload” ,“ onloadeddata”,“ onloadedmetadata”,“ onloadstart”,“ onmousedown”,“ onmousemove”,“ onmouseout”,“ onmouseover”,“ onmouseup”,“ onpause”,“ onplay”,“ onplaying”,“ onprogress”,“ onratechange”,“ onreset”,“ onsroll”,“ onseeked”,“ onseeking”,“ onselect”,“ onshow”,“ onstalled”,“ onsubmit”,“ onsuspend”,“ ontimeupdate”,“ onvolumechange”,“ onwaiting” ,“ onreadystatechange”,“ onmouseenter”,“ onmouseleave”,“ onmozfullscreenchange”,“ onmozfullscreenerror”,“ onmozpointerlockchange”,“ onmozpointerlockerror”,“ onwheel”,“ oncopy”,“ oncut”,“ onpaste”,“ onbeforescriptexecute”,“ onafterscriptexecute”,“ currentScript”,“ mozFullScreenEnabled”,“ mozFullScreenElement”,“ mozFullScreen”,“ mozPointerLockElement”,“ hidden”,“ mozHidden”,“ visibilityState”,“ mozVisibilityState”,“ styleSheets”,“ selectedStyleSheetSet”,“ lastStyleSheetSet” ,“ preferredStyleSheetSet”, “ styleSheetSets”,“构造函数”,“ hasChildNodes”,“ insertBefore”,“ appendChild”,“ replaceChild”,“ removeChild”,“ normalize”,“ cloneNode”,“ isEqualNode”,“ compareDocumentPosition”,“ contains”,“ lookupPrefix” ”,“ lookupNamespaceURI”,“ isDefaultNamespace”,“ isSupported”,“ hasAttributes”,“ setUserData”,“ getUserData”,“ nodeType”,“ nodeName”,“ baseURI”,“ ownerDocument”,“ parentNode”,“ parentElement”, “ childNodes”,“ firstChild”,“ lastChild”,“ previousSibling”,“ nextSibling”,“ nodeValue”,“ textContent”,“ attributes”,“ namespaceURI”,“ prefix”,“ localName”,“ ELEMENT_NODE”,“ ATTRIBUTE_NODE” ”,“ TEXT_NODE”,“ CDATA_SECTION_NODE”,“ ENTITY_REFERENCE_NODE”,“ ENTITY_NODE”,“ PROCESSING_INSTRUCTION_NODE”,“ COMMENT_NODE”,“ DOCUMENT_NODE”,“ DOCUMENT_TYPE_NODE”,“ DOCUMENT_FRAGMENT_NODE”,“ DOCUMENT_NODE”,“ “ DOCUMENT_POSITION_FOLLOWING”,“ DOCUMENT_POSITION_CONTAINS”,“ DOCUMENT_POSITION_CONTAINED_BY”,“ DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC”, nstructor”,“ addEventListener”,“ removeEventListener”,“ dispatchEvent”,“ constructor”,“ constructor”,“ toSource”,“ toString”,“ toLocaleString”,“ valueOf”,“ watch”,“ unwatch”,“ hasOwnProperty” ,“ isPrototypeOf”,“ propertyIsEnumerable”,“ defineGetter ”,“ defineSetter ”,“ lookupGetter ”,“ lookupSetter ”]

我认为您可能希望使用如下所示的循环:

for(int i = 0; i < myArray.length; i++){
  document.write(myArray[i] + "</br>");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM