2016-07-06 2 views
0
var name = []; 

function logger(names) { 
    if (typeof names === "string") { 
    console.log(names); 
    } else if (typeof names === "object") { 
    for (var name in names) { 
     console.log(names.names); 
    } 
    } 
} 

function namesIn(namesData, functionality) { 
    name.push(namesData); 
    functionality(namesData); 
} 

namesIn({ 
    names: ["Michael", "Sally", "Billy", "Dinesh", "Zach"] 
}, logger); 

Когда я перехожу к просмотру моего журнала в chrome, я приветствую это сообщение об ошибке, которое озадачивает: «TypeError: name.push не является функцией»..push не является функцией

В чем проблема?

+2

Возможный дубликат [Использование переменной «name» не работает с объектом JS] (http://stackoverflow.com/questions/10523701/using-the-variable-name-doesnt-work-with-a -js-object) - переименуйте 'имя' из первой строки вашего кода в другое и измените его в' name.push' соответственно. – Xufox

+0

Это связано с переменной с именем «имя», которая объявляется глобальной переменной. 'name' является ограниченным свойством объекта' window', который возвращает имя 'window'. Отсюда и ошибка. См. Вопрос, связанный как дубликат для лучшего объяснения. –

ответ

0

Потому что вы переопределили имя в цикле for. И теперь имя - это строка, которая не поддерживает .push.

Если вы используете let name вместо var name в своей петле, она должна работать.

+0

Если вы переименуете переменную в цикле for на что-то еще, она все равно не работает –

+0

Я исправил ошибку. Отличная точка с переопределенным var в именах. Однако .push поддерживает строки! Я поставлю фиксированный код в свой ответ. Благодаря! – Crayon

+0

@Crayon Я хочу сказать, что Array.prototype.push поддерживает добавление строк, но String.prototype.push не существует. В любом случае, рад, что вы это исправили! – aximus

0
var names = []; 
function logger(names){ 
    if(typeof names ==="string"){ 
     console.log(names); 
    } 
    else if(typeof names ==="object"){ 
    for(var name in names){ 
     console.log(names.names); 
     } 
    } 
    } 

function namesIn(namesData, functionality){ 
    names.push(namesData); 
    functionality(namesData); 
    } 

namesIn({names:["Michael","Sally","Billy","Dinesh","Zach"]},logger); 

Корень проблемы состоял в том, что в цикле for я обновил мою переменную имен!

Я также изменил имя переменной на имена для читаемости.

+0

интересно, javascript рассматривает var name = []; как строка, но var names = []; как объект. если его тип является строкой, push не определен, поэтому получите ошибку, если его объект работает, он работает нормально. – Sabarish

+0

@Sabarish Xufox имеет правильное объяснение проблемы в комментариях выше. См. [Http://stackoverflow.com/questions/10523701/using-the-variable-name-doesnt-work-with-a-js-object](http://stackoverflow.com/questions/10523701/using-the -переменное-имя-оленья кожа-работа-с-JS-объект) – user4040648

Смежные вопросы