2013-12-13 99 views
0

我正在試驗JS對象的鍵值對。Method toString is undefined JavaScript

<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。我不明白爲什麼錯誤的描述是爲所有JS對象定義的方法Uncaught TypeError: Cannot call method 'toString' of undefined.toString

+1

你究竟想要達到什麼目的?關鍵值對從哪裏來? – Latheesan

回答

1

你所面臨的問題是因爲:

submit.key 

你需要使用:

submit[key] 

不僅如此,但在這個調用toString()將失敗,如果密鑰是nullundefined。所以,最好試着抓住它,然後檢查日誌。

看到更新後的提琴:http://jsfiddle.net/abhitalks/BYwz9/4/

希望有所幫助。

更新:(關於對象鍵括號標記的語法)

從這個參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

對象屬性的名稱可以是任何有效的JavaScript字符串或 任何可以轉換爲一個字符串,包括空字符串 。但是,只能使用正方形 括號表示法訪問任何屬性名稱,該名稱不是有效的JavaScript 標識符(例如,具有空格或連字符的屬性名稱, 或以數字開頭)。當要動態確定屬性 (當屬性名稱不是 直到運行時才確定)時,此標記也非常有用。

爲了檢查它在用例中的差異,請將小提琴更改爲兩個符號並檢查控制檯日誌。

+0

請解釋'submit.key'和'submit [key]'之間有什麼區別? –

+0

@聖安達里奧:那裏。更新了答案。沒有太大的區別,但是在括號表示法是安全的情況下有一些情況。 – Abhitalks

1

由於您提交[key],submit.key將會是未定義的。由於您想使用變量來查找屬性,因此需要對象訪問器。

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