Функция существует, но «не определена». Считается истинным при использовании в условии

#javascript #function

#javascript #функция

Вопрос:

Может кто-нибудь объяснить мне, что происходит в следующем коде? Спасибо.

 let myObject = {
    myFunction() {
        console.log('HELLO WORLD');
    }
};

console.log(JSON.stringify(myObject.myFunction));

if (myObject.myFunction) {
    console.log('myFunction exists');
} 

Ответ №1:

Как описано в MDN, JSON.stringify возвращает undefined , когда функция передается в качестве аргумента:

неопределенные, функции и символы не являются допустимыми значениями JSON. Если какие-либо такие значения встречаются во время преобразования, они либо опускаются (при нахождении в объекте), либо изменяются на null (при нахождении в массиве). JSON.stringify() может возвращать неопределенное значение при передаче «чистых» значений, таких как JSON.stringify(function(){}) или JSON.stringify(не определено).

Ответ №2:

Поскольку JSON.stringify() не может использоваться для функций, они обрабатываются как undefined . Смотрите Объяснение здесь .