我有一个简单的测试如下所示。它工作正常,但由于某种原因,“未定义”一词出现在弹出窗口中。没有什么能让我理解什么是未定义的。有没有人经历过这个?
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>
test2.php
console.log("test");
除了“未定义”这个词出现在我的弹出窗口中之外,一切都很有效。有谁知道为什么?我正在使用Firefox 55.0.3。
答案 0 :(得分:2)
eval
评估JavaScript代码并返回评估的最后一个语句的结果。函数console.log
返回undefined
,因此eval('console.log("test")') also returns
未定义(after printing the string
测试`到浏览器的日志中。)
如果您不希望自己的对话框包含undefined
,请不要让评估的JavaScript字符串中的最后一个字符串调用返回undefined
的函数。例如,字符串
console.log("test"); "foobar";
当使用foobar
进行评估时,将返回字符串eval
,因为它是最后一个语句的值。
同样,字符串
console.log("test"); ['a', 'b'].indexOf('a');
评估后,将返回0
,因为它是最终声明中indexOf
调用的返回值。