При работе с JavaScript вы можете встретить термины «не определено» и «не определено». Хотя они могут звучать одинаково, на самом деле они представляют разные сценарии разработки JavaScript. Понимание различий между этими двумя терминами поможет вам отлаживать и писать более надежные приложения JavaScript.

НЕ ОПРЕДЕЛЕНО: в JavaScript «не определено» относится к ошибке ссылки, возникающей при попытке доступа к переменным или идентификаторам, которые не объявлены или не существует в текущей области действия. Эта ошибка обычно возникает, когда на переменную ссылаются до того, как она была объявлена, или при доступе к свойствам или функциям объекта, который не инициализирован.

Существует несколько распространенных сценариев, которые могут привести к "не определенным" ошибкам:

А. Ссылка на необъявленную переменную:

console.log(myVariable); // ReferenceError: myVariable is not defined

В приведенном выше коде myVariable не объявляется и не инициализируется до обращения к ней, что приводит к ошибке «не определено».

Чтобы устранить эту проблему, необходимо убедиться, что переменная объявлена, прежде чем пытаться получить к ней доступ. Например:

let myVariable = ‘error fixed’;
console.log(myVariable);

//output: 'error fixed'

Объявив myVariable с помощью ключевого слова «let», вы предотвратите ошибку «не определено», и переменная будет иметь значение «исправлена ​​ошибка», поскольку ей присвоено это значение.

Б. Проблемы, связанные с областью действия.
Область действия играет важную роль в JavaScript, и ошибки ссылок могут возникать, когда доступ к переменным осуществляется за пределами их области действия или когда их видимость ограничена определенными блоками . (подробнее об области действия и блокировке позже.)

function errorCheck() {
  if (true) {
    let myVariable = 10;
  }
  console.log(myVariable); // ReferenceError: myVariable is not defined
}

errorCheck();

В приведенном выше примере myVariable объявляется в блоке if. Следовательно, при попытке доступа к нему за пределами этого блока возникает ошибка «не определено». Это связано с тем, что его видимость и доступность ограничены этим блоком.

Чтобы решить эту проблему, вы можете объявить myVariable в области действия функции или во внешней области:

 function errorCheck() {
  let myVariable;
  if (true) {
    myVariable = 10;
  }
  console.log(myVariable); // Output: 10
}

errorCheck(); 

Перемещая объявление myVariable во внешнюю область, оно становится доступным как в блоке if, так и внутри функции.

С. Опечатки или неправильные имена переменных:

let message = "Hello, world!";
console.log(mesage); // ReferenceError: mesage is not defined

В этом примере переменная message ошибочно написана как mesage. В результате интерпретатор рассматривает ее как необъявленную переменную, что приводит к ошибке «не определено». Двойная проверка имен переменных и обеспечение их точности могут помочь предотвратить подобные ошибки. (Я оставлю вас исправить это..)

Теперь, когда мы поняли, что такое «не определено», давайте разберемся с «неопределенно».

UNDEFINED:в JavaScript термин "undefined" используется для обозначения значения по умолчанию переменных, которые >были объявлены, но им не присвоено значение. Он также служит значением, возвращаемым при доступе к свойствам или элементам, которые не существуют или которым не присвоено значение.

Примечание: undefined — это не ошибка, это специальное значение, которое javaScript автоматически присваивает переменным и объектам, которым не присвоены значения во время инициализации.

Давайте воспользуемся кодом, чтобы продемонстрировать распространенные случаи.

a) Переменные объявлены, но им не присвоено значение:

let myVariable;
console.log(myVariable); // Output: undefined

Еще раз, это не ошибка. Это значение по умолчанию, которое JavaScript присваивает переменной, потому что вы, разработчик, не присвоили ей начальное значение. Это значение по умолчанию «undefined» может быть полезно в сценариях, где вы хотите указать, что переменная была объявлена, но еще не получила значение. Позже вы можете присвоить значение переменной, когда это необходимо.

b) Доступ к несуществующим свойствам или элементам:

// example 1..
let person = { name: "John", age: 30 };
console.log(person.address); // Output: undefined

// example 2..
let fruits = ["apple", "banana", "orange"];
console.log(fruits[3]); // Output: undefined

В приведенной выше демонстрации кода person — это объект со свойствами name и age. Однако при попытке доступа к несуществующему свойству address результатом будет 'undefined'. Это указывает на то, что объект person не имеет свойства address.

Точно так же при доступе к несуществующим элементам в массиве результат также будет «неопределенным», как в случае с демонстрацией кода в примере 2. При доступе к fruits[3] возвращается значение «undefined», поскольку в массиве нет элемента с индексом 3, поскольку индексы массива начинаются с 0.

c) Функции, которые не возвращают значения явно:

function greet() {
  console.log("Hello!");
}

let result = greet();
console.log(result); // Output: undefined

В приведенной выше функции greet() не указан явный оператор возврата. При вызове этой функции она выполняет код внутри себя, а затем неявно возвращает «неопределенное». Когда мы хотим сохранить вывод функции в переменной, важно добавить оператор return, чтобы обеспечить осмысленное возвращаемое значение.

Я надеюсь, что эта демонстрация поможет вам понять основы JavaScript, особенно когда речь идет о двух терминах "не определено" и "не определено". Понимание этих концепций имеет решающее значение для написания чистого и безошибочного кода.

Удачного кодирования…