2015-12-15 2 views
7

Я использую узел 4.2, и я ломаю ошибку и использую JSON.stringify на нем. Для большинства объектов это работает отлично. Но когда вызывается [TypeError: callback не является функцией], он возвращает пустой объект. если я console.log его напрямую, он работает нормально.Почему JSON.stringify на TypeError возвращает пустой объект

страница Mozilla говорит:

Boolean, Number, and String objects are converted to the corresponding primitive values during stringification, in accord with the traditional conversion semantics.

try { 
    ... 
} catch (err) { 
    console.log('error: ' + JSON.stringify(err)) // outputs {} 
} 
+0

Stringifying пустой объект должен работать, я думаю? – adeneo

+0

И почему бы вам не зарегистрировать его напрямую или как 'console.log ('error:', err)' – adeneo

+0

'console.log (JSON.stringify (TypeError, null, 2))' дает мне undefined –

ответ

9

При использовании stringify на TypeError, вы stringifying объект, без enumerable свойств.

Так что, если вы

var typeError = new TypeError("hey") 
for(var prop in typeError) { 
    console.log(prop) // this does not run 
} 

При входе в систему с помощью console.log, вы используете valueOf, так

var typeError = new TypeError("hey") 
typeError.valueOf() // TypeError: hey(…) 

Кроме того, ошибка знает, как превратить себя в строку, так что тоже работает:

var typeError = new TypeError("hey") 
typeError.toString() // "TypeError: hey" 

Если вы хотите зарегистрировать свойства объекта, который вы не видите, используя обычный журнал, вы можете console.dir объект.

Когда вы делаете это на typeError, вы увидите, что он имеет свойство message:

enter image description here

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