为什么当我 eval() 来自 Ajax 调用的响应文本时会出现单词"undefined"?



我有一个简单的测试,如下所示。 它工作正常,但由于某种原因,弹出窗口中出现了"未定义"一词。 没有什么能引导我理解什么是未定义的。 以前有人经历过吗?

.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调用的返回值。

最新更新