方法toString是未定义的JavaScript

时间:2013-12-13 12:29:18

标签: javascript

我正在尝试使用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方法。

3 个答案:

答案 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的属性名称   标识符(例如,具有空格或连字符的属性名称,   或者以数字开头)只能使用正方形访问   括号表示法。属性时,这种表示法也非常有用   名称将动态确定(当属性名称不是时   确定到运行时间。)

为了检查它在用例中的区别,请将小提琴更改为两种符号并检查控制台日志。