код undefined что означает
undefined
undefined возвращается, если переменная была объявлена, но значение переменной не было установлено.
Например:
В логе мы видим undefined :
undefined также может возникнуть, если свойство объекта не существует.
или функция имеет отсутствующий параметр:
Проверить тип можно с помощью ключевого слова typeof :
undefined может быть задан явно:
Схожие черты
Давайте посмотрим на их сходства.
Вышеприведенное выведет Нет.
также выведет Нет.
Оба являются примитивными значениями
Примитивные типы данных обрабатываются по значению.
Различия
Вы ожидали, что тип null вернет «null«? Правда? Это ошибка в JS существует уже на протяжении почти двух десятилетий, но дело в том, что она не может быть исправлена. Потому, что тысячи сайтов зависят от такого неправильного поведения, исправление которого приведет к их поломке.
Тесты для null
Как мы уже видели, undefined преобразовывается в » undefined «, а null преобразовывается в » object «.
Мы можем легко проверить на undefined:
Для null, мы не можем этого сделать:
typeof null возвращает » object «, и у нас может возникнуть соблазн переписать все вышеперечисленное следующим образом:
Но многие сложные типы данных возвращают объекты, тип может быть проверен через typeof :
Давайте посмотрим, что происходит, когда строгое и не строгое равенство выполняется для обоих типов.
Сравнение равенств
Не строгое сравнение:
Строгое сравнение:
будет false. Почему? Потому, что null => object не тот же тип, что и undefined => undefined.
Передача null и undefined в качестве аргумента функции
Мы должны быть осторожны при объявлении значения аргумента по умолчанию таким образом:
Если вы пытаетесь проверить на null аргумент, помните, так лучше не делать:
или вы можете делегировать функции проверку на null:
вы можете использовать функцию isNull в любом месте вашей программы:
Заключение
Форум
Справочник
undefined
Обозначает неопределенное значение
Описание, примеры
Например, можно проверить, существует ли глобальная переменная:
Также заметим, что нужен именно строгий оператор сравнения, т.к x==undefined возвратит true также если x является (null), а это уже другое значение.
Строгое сравнение является лучшей альтернативой использованию typeof:
Заметим, что нужен именно строгий оператор сравнения, т.к x==undefined верно также если x является null, а это уже другое значение.
Вопрос непонятен.. Там пример именно с typeof дан в конце статьи.
с this вообще не понимаю ничего. уже неделю разбираюсь. Дайте пример, чтоб запустить и все понять
Ничего не поняла.
Простите я в этом чайник. Мне надо этот undefined убрать, а я не знаю как, боюсь все порушить.
function test(a) <
if (a===undefined) alert(‘a is not defined’);
>
test();
значит «значение не присвоено»
спасибо за сайт, добавлю себе в избранное =)
Классно, typeof мне никогда не нравился. Заменю на ===. Причем фишку с == тоже можно использовать, чтобы определить, что в переменной содержится хоть какое-то значение:
if (obj.Field === undefined || obj.Field == null)
меняется на
if (obj.Field == undefined)
Стоило бы написать, что несуществующую переменную сравниванием с этой переменной проверять нельзя, потому что возникнет ошибка
Илья, просьба замечание Петра внести в статью, так как оно очень важное. Спасибо!
не вижу ничего важного. Это основа, которую обязан знать каждый.
Ну тогда можно все статьи снести что кажутся основой. Этож должен знать каждый. melky, ты глупость сказал
undefined можно использовать в качестве идентификатора, так как значение не является зарезервированным словом.
Также для проверки значения переменной на undefined можно проверить с помощью void:
Ошибки в JavaScript и как их исправить
JavaScript может быть кошмаром при отладке: некоторые ошибки, которые он выдает, могут быть очень трудны для понимания с первого взгляда, и выдаваемые номера строк также не всегда полезны. Разве не было бы полезно иметь список, глядя на который, можно понять смысл ошибок и как исправить их? Вот он!
Ниже представлен список странных ошибок в JavaScript. Разные браузеры могут выдавать разные сообщения об одинаковых ошибках, поэтому приведено несколько примеров там, где возможно.
Как читать ошибки?
Перед самим списком, давайте быстро взглянем на структуру сообщения об ошибке. Понимание структуры помогает понимать ошибки, и вы получите меньше проблем, если наткнетесь на ошибки, не представленные в этом списке.
Типичная ошибка из Chrome выглядит так:
Теперь к самим ошибкам.
Uncaught TypeError: undefined is not a function
Связанные ошибки: number is not a function, object is not a function, string is not a function, Unhandled Error: ‘foo’ is not a function, Function Expected
Возникает при попытке вызова значения как функции, когда значение функцией не является. Например:
Эта ошибка обычно возникает, если вы пытаетесь вызвать функцию для объекта, но опечатались в названии.
Другие вариации, такие как “number is not a function” возникают при попытке вызвать число, как будто оно является функцией.
Как исправить ошибку: убедитесь в корректности имени функции. Для этой ошибки, номер строки обычно указывает в правильное место.
Uncaught ReferenceError: Invalid left-hand side in assignment
Связанные ошибки: Uncaught exception: ReferenceError: Cannot assign to ‘functionCall()’, Uncaught exception: ReferenceError: Cannot assign to ‘this’
Вызвано попыткой присвоить значение тому, чему невозможно присвоить значение.
Наиболее частый пример этой ошибки — это условие в if:
В этом примере программист случайно использовал один знак равенства вместо двух. Выражение “left-hand side in assignment” относится к левой части знака равенства, а, как можно видеть в данном примере, левая часть содержит что-то, чему нельзя присвоить значение, что и приводит к ошибке.
Uncaught TypeError: Converting circular structure to JSON
Связанные ошибки: Uncaught exception: TypeError: JSON.stringify: Not an acyclic Object, TypeError: cyclic object value, Circular reference in value argument not supported
Так как a и b в примере выше имеют ссылки друг на друга, результирующий объект не может быть приведен к JSON.
Как исправить ошибку: удалите циклические ссылки, как в примере выше, из всех объектов, которые вы хотите сконвертировать в JSON.
Unexpected token ;
Связанные ошибки: Expected ), missing ) after argument list
Интерпретатор JavaScript что-то ожидал, но не обнаружил там этого. Обычно вызвано пропущенными фигурными, круглыми или квадратными скобками.
Токен в данной ошибке может быть разным — может быть написано “Unexpected token ]”, “Expected <” или что-то еще.
Как исправить ошибку: иногда номер строки не указывает на правильное местоположение, что затрудняет исправление ошибки.
Ошибка с [ ] < >( ) обычно вызвано несовпадающей парой. Проверьте, все ли ваши скобки имеют закрывающую пару. В этом случае, номер строки обычно указывает на что-то другое, а не на проблемный символ.
Unexpected / связано с регулярными выражениями. Номер строки для данного случая обычно правильный.
Unexpected; обычно вызвано символом; внутри литерала объекта или массива, или списка аргументов вызова функции. Номер строки обычно также будет верным для данного случая.
Uncaught SyntaxError: Unexpected token ILLEGAL
Связанные ошибки: Unterminated String Literal, Invalid Line Terminator
В строковом литерале пропущена закрывающая кавычка.
Как исправить ошибку: убедитесь, что все строки имеют правильные закрывающие кавычки.
Uncaught TypeError: Cannot read property ‘foo’ of null, Uncaught TypeError: Cannot read property ‘foo’ of undefined
Связанные ошибки: TypeError: someVal is null, Unable to get property ‘foo’ of undefined or null reference
Попытка прочитать null или undefined так, как будто это объект. Например:
Как исправить ошибку: обычно вызвано опечатками. Проверьте, все ли переменные, использованные рядом со строкой, указывающей на ошибку, правильно названы.
Uncaught TypeError: Cannot set property ‘foo’ of null, Uncaught TypeError: Cannot set property ‘foo’ of undefined
Связанные ошибки: TypeError: someVal is undefined, Unable to set property ‘foo’ of undefined or null reference
Попытка записать null или undefined так, как будто это объект. Например:
Как исправить ошибку: это тоже обычно вызвано ошибками. Проверьте имена переменных рядом со строкой, указывающей на ошибку.
Uncaught RangeError: Maximum call stack size exceeded
Связанные ошибки: Uncaught exception: RangeError: Maximum recursion depth exceeded, too much recursion, Stack overflow
Обычно вызвано неправильно программной логикой, что приводит к бесконечному вызову рекурсивной функции.
Как исправить ошибку: проверьте рекурсивные функции на ошибки, которые могут вынудить их делать рекурсивные вызовы вечно.
Uncaught URIError: URI malformed
Связанные ошибки: URIError: malformed URI sequence
Как исправить ошибку: убедитесь, что вызовы decodeURIComponent на строке ошибки получают корректные входные данные.
XMLHttpRequest cannot load some/url. No ‘Access-Control-Allow-Origin’ header is present on the requested resource
Связанные ошибки: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at some/url
Эта проблема всегда связана с использованием XMLHttpRequest.
Как исправить ошибку: убедитесь в корректности запрашиваемого URL и в том, что он удовлетворяет same-origin policy. Хороший способ найти проблемный код — посмотреть на URL в сообщении ошибки и найти его в своём коде.
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
Связанные ошибки: InvalidStateError, DOMException code 11
Означает то, что код вызвал функцию, которую нельзя было вызывать в текущем состоянии. Обычно связано c XMLHttpRequest при попытке вызвать на нём функции до его готовности.
Как исправить ошибку: посмотрите на код в строке, указывающей на ошибку, и убедитесь, что он вызывается в правильный момент или добавляет нужные вызовы до этого (как с xhr.open ).
Заключение
JavaScript содержит в себе одни из самых бесполезных ошибок, которые я когда-либо видел, за исключением печально известной Expected T_PAAMAYIM_NEKUDOTAYIM в PHP. Большая ознакомленность с ошибками привносит больше ясности. Современные браузеры тоже помогают, так как больше не выдают абсолютно бесполезные ошибки, как это было раньше.
Какие самые непонятные ошибки вы встречали? Делитесь своими наблюдениями в комментариях.
Русские Блоги
7 советов по работе с undefined в JS
Сегодня я поделюсь с вами знаниями о 7 методах обработки undefined в JS.
Предисловие
Около 8 лет назад, когда я начал изучать JS, я столкнулся со странной ситуацией: были и неопределенные значения, и нули, представляющие пустые значения. В чем очевидная разница между ними? Кажется, все они определяют нулевое значение, и результат сравнения null == undefined истинен.
Большинство современных языков, таких как Ruby, Python или Java, имеют нулевое значение (nil или null), что кажется разумным способом.
Для JavaScript интерпретатор возвращает undefined при доступе к переменным или свойствам объекта, которые еще не были инициализированы. Например:
С другой стороны, null представляет собой отсутствующую ссылку на объект, а сам JS не устанавливает переменные или свойства объекта в значение null.
Некоторые собственные методы, такие как String.prototype.match (), могут возвращать значение null, чтобы указать на отсутствующие объекты. Взгляните на следующий пример:
Благодаря щадящему характеру JS разработчикам легко получить доступ к неинициализированным значениям, и я допустил эту ошибку.
Обычно эта опасная операция вызывает неопределенные связанные ошибки, что приводит к быстрому завершению сценария. Связанные общие сообщения об ошибках:
Разработчики JS могут понять иронию этой шутки:
Чтобы снизить риск таких ошибок, необходимо понимать ситуацию, которая порождает неопределенные. Что еще более важно, он подавляется и предотвращается его распространение в приложении, тем самым повышая надежность кода.
Давайте подробно обсудим undefined и его влияние на безопасность кода.
1 Что, черт возьми, еще не определено
JS имеет 6 основных типов
Логическое: истина или ложь
Number: 1, 6.7, 0xFF
String: “Gorilla and banana”
Symbol: Symbol(“name”) (starting ES2015)
Null: null
Undefined: undefined.
И единственный тип объекта:
Согласно спецификации ECMAScript, из 6 примитивных типов undefined является специальным значением, имеющим свой собственный тип Undefined.
Если переменная не назначена, значение по умолчанию не определено.
Стандарт четко определяет, что при доступе к неинициализированным переменным, несуществующим свойствам объекта, несуществующим элементам массива и т. Д. Вы получите неопределенное значение. Например
Общий поток приведенного выше кода:
Номер неинициализированной переменной
Несуществующее свойство объекта movie.year
Или нет элемента массива movies [3]
Будет определено как неопределенное.
Спецификация ECMAScript определяет тип неопределенного значения
В этом смысле typeof undefined возвращает строку «undefined».
Конечно, typeof может очень хорошо проверить, содержит ли переменная значение undefined.
2 Создайте неопределенные общие сценарии
2.1 Неинициализированные переменные
Объявленная переменная, которая не была назначена (не инициализирована), по умолчанию не определена.
myVariable была объявлена, но еще не назначена, значение по умолчанию не определено.
Когда переменная получает значение один раз и навсегда, рекомендуется использовать объявление const, которое создает неизменяемую привязку.
Приятной особенностью const является то, что переменной const myVariable = ‘initial’ должно быть присвоено начальное значение. Переменные не находятся в неинициализированном состоянии, и доступ к undefined невозможен.
В следующем примере функция проверяет, является ли слово палиндромом:
Переменные длины и половины назначаются один раз. Кажется разумным объявить их как const, потому что эти переменные не изменятся.
Если вам нужно повторно связать переменные (то есть несколько назначений), примените объявления let. По возможности сразу же присвойте ему начальное значение, например, пусть index = 0.
Что касается использования оператора var, по сравнению с ES6 рекомендуется полностью отказаться от него.
Переменные, объявленные var, будут перемещены в начало всей области действия функции. Вы можете объявить переменную var где-нибудь в конце области видимости функции, но вы все равно можете получить к ней доступ до объявления: значение соответствующей переменной не определено.
Напротив, переменная, объявленная с помощью let или const, не может быть доступна раньше. Это происходит потому, что перед объявлением переменная находится во временной мертвой зоне. Это хорошо, потому что тогда будет очень мало возможности получить доступ к неопределенному значению.
В приведенном выше примере, обновленном с помощью let (вместо var), возникает ошибка ReferenceError, так как переменная во временной мертвой зоне недоступна.
Сам кодовый блок можно рассматривать как небольшой модуль.Для достижения максимально возможной согласованности необходимо сделать переменные как можно ближе к местоположению кодового блока, использующего их.
Например, если переменная существует только для формирования области действия блока, не подвергайте эту переменную области действия внешнего блока, потому что внешний блок не должен заботиться об этой переменной.
Типичным примером излишнего продления времени жизни переменной является использование цикла for в функции:
Переменные index, item и length объявляются в начале тела функции, но используются только в конце. Что плохого в таком подходе?
От объявления вверху до оператора for переменные index и item не инициализированы, а значение не определено. У них неоправданно долгий жизненный цикл всего объема функций.
Лучше всего переместить эти переменные как можно дальше туда, где они используются:
Переменные index и item существуют только в области действия оператора for и не имеют значения за пределами for. Переменная длины также объявляется рядом с тем местом, где она используется.
Почему исправленная версия лучше первоначальной? Можно выделить несколько основных моментов:
Переменные не имеют неопределенного состояния, поэтому нет риска получить доступ к неопределенному
Перемещение переменных как можно дальше в положение их использования повысит читаемость кода.
Сильно связанные блоки кода легче рефакторировать и при необходимости извлекать в отдельные функции.
2.2 Доступ к несуществующим свойствам
При доступе к несуществующим свойствам объекта JS возвращает значение undefined.
Давайте проиллюстрируем это на примере:
Доступ к несуществующим свойствам сам по себе не вызовет ошибки, но возникнут проблемы при попытке получить данные из значений несуществующих свойств. Распространенной ошибкой является TypeError: невозможно прочитать свойство undefined.
Немного измените предыдущий фрагмент кода, чтобы проиллюстрировать выброс TypeError:
FavoriteMovie не имеет атрибутов актеров, поэтому значение favouriteMovie.actors не определено. Следовательно, использование выражения favouriteMovie.actors [0] для доступа к первому элементу неопределенного значения вызовет TypeError.
К сожалению, мы часто не можем контролировать объект. В разных сценариях эти объекты могут иметь разные наборы атрибутов, поэтому все эти сценарии необходимо обрабатывать вручную:
Затем мы реализуем функцию append (array, toAppend), основной функцией которой является добавление новых элементов в начало и / или конец массива. Параметр toAppend принимает объекты с атрибутами:
сначала: вставьте элемент в начало массива
last: элемент вставляется в конец массива.
Функция возвращает новый экземпляр массива без изменения исходного массива (то есть это чистая функция).
Первая версия append () выглядит относительно простой, как показано ниже:
Поскольку объект toAppend может опускать первый или последний атрибуты, необходимо проверить, существуют ли эти атрибуты в toAppend. Если свойство не существует, значение метода доступа к свойству не определено.
В текущей реализации append () эта функция не позволяет вставлять фиктивные элементы:
Следующие советы объясняют, как правильно проверять наличие атрибутов.
Совет 3. Проверьте, существует ли атрибут
JS предоставляет множество методов для определения наличия у объекта определенных свойств:
Я предлагаю использовать оператор in с коротким синтаксисом. Наличие оператора in указывает на четкое намерение, то есть проверить, имеет ли объект конкретный атрибут, без доступа к фактическому значению атрибута.
obj.hasOwnProperty (‘prop’) также является хорошим решением. Он немного длиннее, чем оператор in, и проверяется только в собственных свойствах объекта.
Остальные два метода сравнения с undefined могут работать, но, на мой взгляд, obj.prop! == undefined и typeof obj.prop! == ‘undefined’ выглядит длинным и странным и обнаруживает подозрительные пути, которые напрямую связаны с undefined.
Давайте воспользуемся оператором in для улучшения функции append (array, toAppend):
Совет 4. Разберите свойства объекта доступа
При доступе к свойствам объекта, если свойство не существует, иногда необходимо указать значение по умолчанию. Для этого можно использовать тернарные операторы и.
Когда количество проверяемых свойств увеличивается, использование синтаксиса тернарных операторов становится сложной задачей. Для каждого свойства должна быть создана новая строка кода для обработки значения по умолчанию, что добавляет уродливую стену из похожих тернарных операторов.
Чтобы использовать более элегантный подход, вы можете использовать деструктуризацию объекта ES6.
Деструктуризация объекта позволяет напрямую извлекать значение свойства объекта в переменную, а значение по умолчанию устанавливается, когда свойство не существует, избегая удобного синтаксиса прямой обработки undefined.
Фактически, извлечение атрибутов теперь выглядит коротким и значимым:
Воспользовавшись преимуществами разрушения объекта, реализуем quote ()
const
Эта функция еще нуждается в улучшении. Давайте переместим назначение деструктуризации прямо в раздел параметров. И установите значение по умолчанию (пустой объект <>) для параметра конфигурации, чтобы второй параметр можно было пропустить, если настройки по умолчанию достаточно.
Обратите внимание, что назначение деструктуризации заменяет параметр конфигурации функции. Мне нравится это: quote () укорачивает одну строку. = <> В правой части назначения деструктуризации убедитесь, что вы используете пустой объект, вообще не указывая второй параметр.
Совет 5: заполните объекты атрибутами по умолчанию
Если вам не нужно создавать переменные для каждого атрибута, например деструктурирующее присваивание, тогда объекты, которые теряют некоторые атрибуты, могут быть заполнены значениями по умолчанию.
Например, вам необходимо получить доступ к свойствам объекта unsafeOptions, который не всегда содержит полный набор его свойств.
Чтобы избежать доступа к несуществующим свойствам из unsafeOptions, давайте внесем некоторые изменения:
Определите объект по умолчанию, содержащий значения атрибутов по умолчанию
Вызовите Object.assign (<>, defaults, unsafeOptions) для создания новых параметров объекта. Новый объект получает все свойства от unsafeOptions, но недостающие свойства получаются от объекта по умолчанию.
unsafeOptions содержит только свойство fontSize. Объект defaults определяет значения по умолчанию для свойств fontSize и color.
Object.assign () принимает первый параметр как целевой объект <>. Целевой объект получает значение свойства fontSize от исходного объекта unsafeOptions. И люди получают значение атрибута цвета объекта по умолчанию, потому что unsafeOptions не содержит атрибута цвета.
Порядок, в котором перечисляются исходные объекты, важен: атрибуты исходных объектов на задней стороне будут иметь приоритет над атрибутами исходных объектов на передней панели.
Теперь можно безопасно получить доступ к любым свойствам объекта параметров, включая options.color, которые не были доступны в исходном unsafeOptions.
Инициализаторы объектов расширяют свойства исходных объектов по умолчанию и unsafeOptions. Порядок, в котором указываются исходные объекты, важен, и атрибуты исходных объектов позже переопределят исходные объекты на переднем плане.
2.3 Параметры функции
Для параметра функции неявно по умолчанию установлено значение undefined.
Как правило, функция, определенная с определенным числом параметров, должна вызываться с тем же числом параметров. В этом случае параметр получает желаемое значение.
Вызовите multiply (5,3), чтобы параметры a и b получили соответствующие значения 5 и 3, и верните результат: 5 * 3 = 15.
Что будет, если вы не укажете параметры при вызове?
Функция multiply (a, b) <> определяется двумя параметрами a и b. Вызов multiply (5) выполняется с одним параметром: в результате один параметр равен 5, а параметр b не определен.
Совет 6. Используйте значения параметров по умолчанию
Иногда функции не требуется вызывать полный набор параметров, вы можете просто установить значение по умолчанию для параметра без значения.
Оглядываясь на предыдущий пример, давайте сделаем улучшение. Если параметр b не определен, присвойте ему значение по умолчанию 2:
Хотя предоставленный метод присвоения значений по умолчанию эффективен, не рекомендуется напрямую сравнивать с неопределенными значениями. Это многословно и похоже на взлом.
Здесь вы можете использовать значения по умолчанию ES6:
2.4 Возвращаемое значение функции
Неявно отсутствует оператор return, а функция JS возвращает значение undefined.
В JS функции без оператора return неявно возвращают undefined:
Функция square () не возвращает результат вычисления, а результат при вызове функции не определен.
Если после оператора return нет выражения, по умолчанию возвращается undefined.
Оператор return; выполняется, но не возвращает никакого выражения, и результат вызова не определен.
Совет 7. Не верьте в автоматическую вставку точек с запятой
Следующий список операторов в JS должен заканчиваться точкой с запятой (;):
Если вы используете одно из приведенных выше объявлений, попробуйте поставить в конце точку с запятой:
В конце оператора let и оператора return ставится точка с запятой.
Что произойдет, если вы не захотите писать эти точки с запятой? Например, мы хотим уменьшить размер исходного файла.
В этом случае ECMAScript предоставляет механизм автоматической вставки точек с запятой (ASI) для вставки отсутствующих точек с запятой для вас.
С помощью ASI точку с запятой можно убрать из предыдущего примера:
Приведенный выше код является допустимым кодом JS, отсутствующая точка с запятой ASI будет вставлена для нас автоматически.
На первый взгляд выглядит очень красиво. Механизм ASI позволяет вам писать меньше ненужных точек с запятой, что может сделать код JS меньше и легче читается.
ASI устроила небольшую неприятную ловушку. Когда символ новой строки находится между return и return \ n выражением, ASI автоматически вставляет точку с запятой перед символом новой строки (return; \ n выражение).
Возврат; внутри функции? То есть функция возвращает undefined. Если вы не понимаете в деталях механизм ASI, неожиданный возврат undefined вызовет неожиданные проблемы.
Вот значение, возвращаемое вызовом getPrimeNumbers ():
Между оператором return и массивом есть разрыв строки. JS автоматически вставляет точку с запятой после return. Код объяснения выглядит следующим образом:
return; заставляет функцию getPrimeNumbers () возвращать undefined вместо ожидаемого массива.
Эта проблема решается удалением разрыва строки между return и текстом массива:
Я предлагаю изучить точный способ автоматической вставки точки с запятой, чтобы избежать этой ситуации.
Конечно, никогда не помещайте символ новой строки между return и возвращаемым выражением.
2.5 оператор void
Выражение вычисления void возвращает значение undefined независимо от результата вычисления
Неопределенный массив
При доступе к элементу массива с индексом за пределами диапазона вы получите значение undefined.
Массив цветов состоит из 3 элементов, поэтому эффективные индексы равны 0, 1 и 2.
В JS можно встретить так называемые разреженные массивы. Эти массивы представляют собой массивы с пробелами, то есть в некоторых индексах элементы не определены.
При доступе к пробелам (также называемым пустыми слотами) в разреженном массиве вы также получите undefined.
Следующий пример генерирует разреженные массивы и пытается получить доступ к их пустым слотам.
Чтобы избежать неопределенности при использовании массивов, обязательно используйте допустимые индексы массива и избегайте создания разреженных массивов.
Разница между undefined и null
Возникает резонный вопрос: в чем основное различие между undefined и null? Оба этих специальных значения представляют пустое состояние.
Основное отличие состоит в том, что undefined означает значение переменной, которая не была инициализирована, а null означает, что объект не существует намеренно.
Давайте рассмотрим разницу между ними на нескольких примерах.
номер определен, но не присвоен.
Числовая переменная не определена, что явно указывает на неинициализированную переменную.
Такая же неинициализированная концепция также возникает при доступе к несуществующим свойствам объекта.
Поскольку свойство lastName не существует в obj, JS правильно вычисляет obj.lastName как undefined.
В других случаях вы знаете, что переменная ожидает удержания объекта или функции, возвращающей объект. Но по какой-то причине вы не можете создать экземпляр объекта. В этом случае значение null является значимым индикатором отсутствия объектов.
Оператор typeof различает эти два значения
Оператор строгого равенства === может правильно различать undefined и null:
3 резюме
Существование undefined является результатом разрешенного характера JS, который позволяет использовать:
Сколько вы узнали о 7 методах работы с undefined в JS? Добро пожаловать, чтобы оставить комментарий в области сообщений!
Интеллектуальная рекомендация
PAT Class B 1090 Упаковка для опасных грузов
При транспортировке товаров в контейнерах нужно быть очень осторожным, чтобы не упаковать несовместимые товары в ящик. Например, окислитель не должен находиться в одной емкости с легковоспламеняющейся.
Клавиша ярлыка терминатора Ubuntu1804
Установить Рендеринг горячая клавиша Ctrl + Shift + E Вертикальное сегментационное окно Ctrl + Shift + O Горизонтальное сегментационное окно Ctrl + Shift + N Свободно переключите каждое окно сегментац.
Конфигурация резервного копирования библиотеки Postgresl под WIN окружающей среды
1. Изменение основного сервера и в режиме ожиданияИзмените разрешение подключения файла pg_hba.conf базы данных: изменился на: В это время, вы должны убедиться, что вы можете подк.
Каркас TensorFlow для машинного обучения
Компьютерная графика (семь) Кривая Безье (Bessel) и исходный код
Загрузка исходного кода:Нажмите меня, чтобы скачать «Кривая Безье» была изобретена французским математиком Пьером Безье, который заложил основы компьютерной векторной графики. Его основное.