gpt4 book ai didi

javascript - 对象重映射问题 - 属性未定义

转载 作者:行者123 更新时间:2023-12-01 01:23:19 25 4
gpt4 key购买 nike

好吧,我可能忽略了一些非常明显的事情,但我无法弄清楚为什么会发生这种情况(在 Firefox 和 Chrome 中)。这是我的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body, html { background-color: #ffffff; }
div { text-align: center; color: #000000; }
table, th, td { border: 1px solid #000000; border-collapse: collapse; }
table { table-layout: fixed; }
th,td { padding: 5px; }
#err { background-color: #ff0000; }
</style>
<script type="text/javascript">
function main() {
if(document.readyState == 'complete') {
var Arr = [
{a: 'a0', b: 'b0', c: 'c0'},
{a: 'a1', b: 'b1', c: 'c1'},
{a: 'a2', b: 'b2', c: 'c2'},
{a: 'a3', b: 'b3', c: 'c3'},
{a: 'a4', b: 'b4', c: 'c4'}
];
var strErr;
var strMsg;
var strRsl = document.querySelector('#rsl').innerHTML;
document.querySelector('#prc').addEventListener('click', getResults, false);

function getResults() {
strErr = '';
strMsg = strRsl;
document.querySelector('#err').innerHTML = strErr;
document.querySelector('#rsl').innerHTML = strMsg;
Arr = Arr.map(remap);
}
function remap(value, index, array) {
return {
d: value.a,
e: value.a.toLowerCase().replace(/ /g, '_'),
f: value.c.toLowerCase(),
g: value.b,
h: '',
k: -1
};
}
} else {
setTimeout(function() { main(); }, 1000);
}
}
</script>
</head>
<body onload="javascript: main();">
<div>
<input type="button" id="prc" value="Do Stuff" style="cursor: pointer;">
<p id="err"></p>
<table id="msg" align="center">
<tr><th>d</th><th>e</th><th>f</th><th>g</th><th>h</th><th>k</th></tr>
<tfoot id="rsl" align="center"></tfoot>
</table>
</div>
</body>
</html>

Firefox 控制台返回(第 39 行):

TypeError: value.a is undefined

Chrome 控制台返回(第 39 行):

Uncaught TypeError: Cannot read property 'toLowerCase' of undefined

在某些情况下,当发生相同的错误时,由于某种神奇的原因,对象仍然可以成功地重新映射。此外,该对象似乎只有在单击“Do Stuff”按钮两次后才会创建。

这是否与它在一个仅在页面加载时调用的函数中实例化这一事实有关?

最佳答案

第一次remap调用之后。 Arr 变成没有 a 属性的对象数组,因此 e: value.a.toLowerCase().replace(//g, '_') , 抛出,因为没有 value.a

如果您希望映射始终成功,请始终将字符串分配给返回对象的 a(和 c)属性,或者省略 如果输入对象上的 ac 不存在,则 ef 属性。

关于javascript - 对象重映射问题 - 属性未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54061436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com