我正在尝试使用JS
个对象的键值对。
<div id="parent" class="parent">
<div id="child" class="child">
<input type="text" class="text"/>
<input id="submit" type="submit" onclick="doThis()"/>
</div>
<div>
和相应的JS
代码:
function doThis(){
var span= document.createElement("span");
var parent=document.getElementById("parent");
var child=document.getElementById("child");
var submit=document.getElementById("submit");
child.insertBefore(span,submit);
myKeys=[];
for(var key in submit){
myKeys.push("{"+key);
myKeys.push(" "+submit.key + "}");
}
span.innerHTML=myKeys;
}
它正常工作。但是,如果我们将submit.key
替换为submit.key.toString()
则不起作用。的 JSFIDDLE 即可。我不明白为什么错误的描述是为所有Uncaught TypeError: Cannot call method 'toString' of undefined.
对象定义的toString
JS
方法。
答案 0 :(得分:1)
submit.key将是未定义的,因为您的意思是提交[key]。由于您希望使用变量来查找属性,因此需要对象访问器。
答案 1 :(得分:1)
在检查 submit
的内容时,我得到了
console.log(submit)
返回
<input id="submit" type="submit" onclick="doThis()"/>
然而,
console.log(submit.key) //returns undefined
因为submit
没有key
因此错误toString() method cannot call of undefined
答案 2 :(得分:1)
您面临的问题是:
submit.key
你需要使用:
submit[key]
不仅如此,如果密钥为 null 或 undefined ,则对此调用toString()
将失败。所以,最好先试一试,然后查看日志。
查看您的更新小提琴: http://jsfiddle.net/abhitalks/BYwz9/4/
希望有所帮助。
更新 :( 关于对象键括号表示法的语法)
从此参考文献:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
对象属性名称可以是任何有效的JavaScript字符串,或 任何可以转换为字符串的东西,包括空字符串 串。但是,任何不是有效JavaScript的属性名称 标识符(例如,具有空格或连字符的属性名称, 或者以数字开头)只能使用正方形访问 括号表示法。属性时,这种表示法也非常有用 名称将动态确定(当属性名称不是时 确定到运行时间。)
为了检查它在用例中的区别,请将小提琴更改为两种符号并检查控制台日志。