Javascript 可能的功能/变量提升问题
最初,您按下一个按钮,会出现提示,要求输入条目,条目被放置到类型“Wall”中,然后类型被“推”到数组“walls”中。然后调用函数Javascript 可能的功能/变量提升问题,javascript,arrays,html,local-storage,Javascript,Arrays,Html,Local Storage,最初,您按下一个按钮,会出现提示,要求输入条目,条目被放置到类型“Wall”中,然后类型被“推”到数组“walls”中。然后调用函数wallTable(),将数组walls排列到前端的HTML5表中。(这一切都很好) 以下是wallTable()函数: function wallTable(){ var tableDiv = document.getElementById("wallTable"), table = "<table border='1'>" +
wallTable()
,将数组walls
排列到前端的HTML5表中。(这一切都很好)
以下是wallTable()
函数:
function wallTable(){
var tableDiv = document.getElementById("wallTable"),
table = "<table border='1'>" +
"<thread><th>Room</th><th>Surface</th><th>Material</th><th>Width</th><th>Height</th><th>Surface Area</th></thread>";
for(var i = 0, j = walls.length; i<j; i++){
var wallTable = walls[i];
console.log("Check 2");
table += wallTable.tableRow(); //Uncaught TypeError: undefined is not a function. wallTable <------------?????????????????????????
console.log("Check 3");
}
table += "</table>";
tableDiv.innerHTML = table;
}
如果localStorage(“wallArray”)
中没有任何内容,即使在输入内容之后,程序也可以正常运行。只有当您使用localStorage(“wallArray”)
中的内容打开程序时,才会抛出错误。您使用一个参数(walls)调用wallTable(),而您的声明不接受任何参数。。。
首先,试着这样声明:
function wallTable(walls){...}
或者,如果您希望继续不接受任何参数,请在wallTable()范围内不使用任何参数调用wallTable(),并确保可以正确访问墙。我假设您已经在某个地方全局声明了它。当您将JavaScript对象传递给
JSON.stringify()
时,您将丢失对象的所有原始“个性”;您得到的只是一个带有属性值的JSON字符串。随后调用JSON.parse()
返回普通对象。您的原始对象及其.tableRow()
函数将不会被重新创建。您能否建议一种在不发生这种情况下存储信息的方法?该机制允许您对对象的还原方式进行一些控制。根据序列化的数据的性质,您可以使用它来使用类重新创建对象。本地存储和Cookie都将您可以保存的内容限制为纯字符串,因此在不涉及服务器端存储的情况下,没有其他选项。您在不同的上下文中使用相同的变量名,使一切都变得混乱。还有,当它不接受任何参数时,为什么你要将参数传递给wallTable()
?是的,这是因为我刚才扔了一些东西,比如“请工作!”是的,这是因为我刚才扔了一些东西,比如“请工作,为什么你不工作?”但现在我知道了为什么,多亏了PointyBesides,我看到了你的“检查1”,“check 2”console.logs…这种进入程序的方式不是最优的。使用console.log直接检查JSON解析的内容(console.log(walls)),并尝试使用诸如FireFox之类的调试器,设置断点,在其中暂停并检查DOM树中的任何值、对象结构、数组内容。
function wallTable(walls){...}