2015-10-07 3 views
0

Я пытаюсь проанализировать объект рекурсивно, не зная, является ли следующий элемент строкой или следующим вложенным объектом. Я думал об этом, глядя на тип значения; это будет строка или объект. Но что-то странное происходит ...разница в Coffescript/Javascript typeof

Этот код Coffescript ведет себя странно:

c = (strLog) -> 
    console.log strLog 
console.clear() 
c '------------' 


translateDoc= (doc) -> 
    c 'in translatedoc' 
    for key,value of doc 
     c key 
     c typeof(value) 
    return null 

doc = 
    str1: 'content1' 
    str2: 'content2'  
    obj1: 
     str3: 'content 4' 
     str4: 'content 3'  

for key,value of doc 
    c key 
    c typeof(value)  

translateDoc(doc) 

это даст этот вывод:

str1 
str2 
obj1 
object 
in translate doc 
str1 
string 
str2 
string 
obj1 
object 

который puzzels меня; Я бы вывел строку, чтобы быть там в первый раз тоже ... когда я передал код CS в coffeescript.org, я получил, конечно, код JS. Но если я запустил это в jsfiddle, я получаю ожидаемый результат дважды! ... Я не вижу, в чем разница ...

1) почему я не получаю «строку» -log первого цикла и 2) почему/do/я получаю интерпретируемый JS, но не в интерпретаторе CS jsfiddle?

оригинальный CS код: CS code in fiddle

интерпретируемый JS код: JS code in fiddle

Желание учиться, но озадачен на данный момент ... :-)

ответ

1

Ваш CS имеет вкладку

for key,value of doc 
    c key 
    c typeof(value) # tab instead of leading space 

, который заставляет его перекачиваться в

for (key in doc) { 
    value = doc[key]; 
    c(key); 
} 

c(typeof value); 
+0

wow .. спасибо! Мне нужно иногда вырезать/вставлять в редактор, который будет показывать пробелы ... Я начинаю понимать, почему людям не нравятся значительные пробелы в Coffeescript ... :-) –

+0

Интервал меня все время. Это хорошая идея для запуска вашего кода через http://www.coffeelint.org/ –

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