我有一个简单的测试,如下所示。 它工作正常,但由于某种原因,弹出窗口中出现了"未定义"一词。 没有什么能引导我理解什么是未定义的。 以前有人经历过吗?
.HTML
<html><head>
<style>#popup{border:1px solid black;background:#eadcce;padding:10px;margin:35px;display:none;}</style>
<script>
function popup(){
var z;
if(window.XMLHttpRequest){z=new XMLHttpRequest();}else{z=new ActiveXObject("Microsoft.XMLHTTP");}
z.onreadystatechange=function(){if(z.readyState==4&&z.status==200){
if(z.responseText != ''){
document.getElementById('popup').innerHTML=eval(z.responseText);
document.getElementById('popup').style.display="block";
}
}}
z.open("POST",'/test2.php');z.send();
}
</script></head><body>
Push the button to open the popup: <button onclick="parent.popup();">Open Popup</button>
<div id="popup"></div>
</body></html>
测试2.php
console.log("test");
一切都很好,除了"未定义"一词出现在我的弹出窗口中。 有谁知道为什么? 我正在使用火狐 55.0.3。
eval
计算JavaScript代码并返回最后一个计算语句的结果。该函数console.log
返回undefined
,因此eval('console.log("test")') also returns
未定义的(after printing the string
测试"到浏览器的日志中)。
如果您不希望对话框包含 undefined
,请不要使计算的 JavaScript 字符串中的最后一个词干成为对返回 undefined
的函数的调用。例如,字符串
console.log("test"); "foobar";
当用 eval
求值时,将返回字符串foobar
,因为这是最后一个语句的值。
同样,字符串
console.log("test"); ['a', 'b'].indexOf('a');
将在计算时返回 0
,因为这是 FINAL 语句中indexOf
调用的返回值。