Метод toString не определен JavaScript

69
6

Я экспериментирую с парой ключевых значений 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.

спросил(а) 2013-12-13T15:29:00+04:00 6 лет, 2 месяца назад
1
Решение
50

Проблема, с которой вы сталкиваетесь, связана с:

submit.key

вам необходимо использовать:

submit[key]

Не только это, но вызов toString() на этом не будет выполнен, если ключ имеет значение null или undefined. Итак, лучше попытайтесь поймать его, а затем просмотрите журнал.

Смотрите обновленную скрипту: http://jsfiddle.net/abhitalks/BYwz9/4/

Надеюсь, это поможет.

Обновление: (в отношении синтаксиса обозначения брелка объекта)

Из этой справки: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

Имя свойства объекта может быть любой допустимой строкой JavaScript или любым, что может быть преобразовано в строку, включая пустую строку. Однако любое имя свойства, которое не является допустимым идентификатором JavaScript (например, имя свойства, которое имеет пробел или дефис или которое начинается с числа), может быть доступно только с помощью обозначения квадратной скобки. Эта нотация также очень полезна, когда имена свойств должны быть динамически определены (когда имя свойства не определено до времени исполнения).

Чтобы проверить разницу, которую она делает в вашем прецеденте, пожалуйста, измените скрипт на обе нотации и проверьте журнал консоли.

ответил(а) 2013-12-13T15:41:00+04:00 6 лет, 2 месяца назад
48

Проверяя, что submit, я получил

console.log(submit) 

возвращается

<input id="submit" type="submit" onclick="doThis()"/>

В то время как,

console.log(submit.key) //returns undefined

потому что submit не содержит key

Следовательно, метод error, toString() method cannot call of undefined

ответил(а) 2013-12-13T15:35:00+04:00 6 лет, 2 месяца назад
52

submit.key будет неопределенным, так как вы имели в виду submit [key]. Аксессоры объектов требуются, так как вы хотите использовать переменную для поиска свойства.

ответил(а) 2013-12-13T15:35:00+04:00 6 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема