2015-07-07 8 views
4

У меня есть код ниже в coffeescript после запуска этих строк значение str по-прежнему «d41d8cd98f00b204». Любые мысли о том, что я могу делать неправильно?Любая идея, почему это происходит в coffeescript

dataDict = {email: "[email protected]", t:213213.213213} 
apiFields = ['email', 'password', 'backup_email', 'firstname', 
      'lastname', 'dob', 'username', 'position', 'industry', 
      'institution', 'verificationcode', 'confirmcode', 
      'signuphost', 'responses', 't'] 

str = "d41d8cd98f00b204" 
for ind in apiFields 
    str = str + dataDict[ind] if ind in dataDict 
console.log(str) 

ответ

2

Я хотел бы сделать:

append = dataDict[ind] 
str = str + append if append 

Что вы компилирует:

if (__indexOf.call(dataDict, ind) >= 0) str = str + dataDict[ind]; 

где

__indexOf === [].indexOf //Array.prototype's indexOf 

и Array.prototypeindexOf не работает на объектах без массива.

0

Проверьте расширение if ind in dataDict:

if (indexOf.call(dataDict, ind) >= 0) { 
    str = str + dataDict[ind]; 
} 

Проверка if dataDict.hasOwnProperty(ind) должен получить эту работу.

2

Я думаю in работает только на массивах, попробуйте:

str = str + dataDict[ind] if dataDict[ind] 
2

fine manual От:

Вы можете использовать in для проверки наличия массива и of для проверки объекта-ключ JavaScript присутствия.

in для проверки, если элемент в массиве (так же, как вы используете for ... in перебрать массив), если вы хотите проверить, если ключ находится в объекте, вы бы использовать of (так же, как вы используете for ... of для итерации по объекту):

str = str + dataDict[ind] if ind of dataDict 
# -------------------------------^^ 
Смежные вопросы