почему null == undefined верно в JavaScript
Если alert(null==undefined) выводится на true . Какова логическая причина этого. Это что-то, что жестко закодировано в javascript или есть объяснение для этого.
Nav 17 май 2013, в 13:29
Поделиться
да . можете ли вы указать мне на какой-то материал, в котором говорится о причине, а не только о том, что она равна: P
Nav 17 май 2013, в 11:24
Я бы сказал, потому что undefined ничего не значит. Если у вашего div нет идентификатора, он не определен, или мы можем сказать, что он не существует, null, void.
Stefan Candan 17 май 2013, в 11:25
Можете ли вы объяснить, как на самом деле работает оператор ==, когда дело доходит до сравнения неопределенных и нулевых
Nav 17 май 2013, в 11:28
возможный дубликат null против undefined и их поведение в JavaScript или undefined и null
Bergi 17 май 2013, в 11:29
для полного объяснения и полного набора правил проверьте это: webreflection.blogspot.dk/2010/10/…
Maurizio In denmark 17 сен. 2013, в 08:58
Показать ещё 3 комментария
Поделиться:
4 ответа
Лучший ответ
Если x равно null, а y — undefined, верните true
Мне не известны записи о процессе разработки языка, которые объясняют аргументацию этого решения, но == имеет правила для обработки разных типов, а «null» и «undefined» — это то, что означает «ничего», поэтому, если они будут равны, они делают интуитивный смысл.
(Если вы не хотите вводить скрипты, используйте === ).
Quentin 17 май 2013, в 12:32
Поделиться
так ты хочешь сказать, что это жестко, да .
Nav 17 май 2013, в 11:56
Оу, да. Это часть основного языка.
Quentin 17 май 2013, в 11:57
скажите мне одну вещь . когда мы используем == типы становятся равными, а затем проверяются на равенство, верно? тип undefined является неопределенным, а тип null является object, тогда является object == undefined .
Nav 17 май 2013, в 12:00
«когда мы используем == типы становятся равными» — нет (по крайней мере, не всегда), смотрите ссылку в первой строке моего ответа.
Quentin 17 май 2013, в 12:01
Можете ли вы проверить ответ Спудли и объяснить мне . я запутался, как приведение типов осуществляется для неопределенных и нулевых 🙁
Nav 17 май 2013, в 12:05
@Nav — Это не так. Существуют определенные правила для того, что делать при сравнении неопределенного с нулевым, и они применяются перед правилами преобразования в разные типы.
Quentin 17 май 2013, в 12:06
Такие вещи иногда заставляют меня думать, что javascript — это запоминание случайных пустяков плохо написанного кода и его последствий 🙁
Nav 17 май 2013, в 12:07
Я не думаю, что я когда-либо сталкивался с языком программирования, где свободно типизированный оператор сравнения имел полный смысл. В общем, я рекомендую придерживаться === если вы не знаете, что хотите принудительное приведение типов (обычно это происходит только тогда, когда вы сравниваете String или Number с переменной, которая, как вы ожидаете, будет содержать String или Number).
Quentin 17 май 2013, в 12:09
спасибо человек .. да я сам использую === но один интервьюер задал мне этот вопрос . так что я подумал, что все проясню 🙂
Nav 17 май 2013, в 12:12
Ссылка на спецификацию — чистое золото, спасибо, перестаньте спорить о том, как вам нравится javascript, и вместо этого читайте документы.
Agustín Amenabar 04 дек. 2013, в 01:01
Показать ещё 8 комментариев
Использование оператора двойного равенства заставляет Javascript делать принуждение типа.
Другими словами, если вы выполняете x == y , если x и y не одного типа, JavaScript будет отличать одно значение до сравнения, например, если сравнивать строку и число, строка всегда вставляются в число, а затем сравниваются
По этой причине многие сравнения смешанных типов в JavaScript могут приводить к результатам, которые могут быть неожиданными или противоречивыми.
Если вы хотите делать сравнения в JavaScript, обычно лучше использовать оператор тройного равенства === , а не двойной. Это не приводит к принуждению типа; вместо этого, если типы разные, он возвращает false. Это чаще всего то, что вам нужно.
Вы должны использовать только двукратное, если вы абсолютно уверены, что вам это нужно.
null и undefined — практические примеры
Вопрос таков: в JavaScript есть свойства null и undefined , которые являются двумя разными объектами, но равны между собой. Ну так зачем же в JS присутствует и то и другое, какие реальные практические полезности это дает?
Отслеживать
задан 4 сен 2012 в 13:42
Anton Mukhin Anton Mukhin
5,515 9 9 золотых знаков 51 51 серебряный знак 92 92 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
в JavaScript есть свойства null и undefined, которые являются двумя разными объектами, но равны между собой
- null и undefined — примитивные значения
- они не являются объектами
- они не равны между собой
если тип переменной равен undefined , следовательно переменная не имеет значения вообще, как будто и не была объявлена, а null — это всего лиш ссылка в никуда, но ссылка, т.е. какое-то значение, его можно использовать например для того, чтобы пометить объект, который должен быть уничтожен GC
Ну так зачем же в JS присутствует и то и другое
в JS много чего есть, чья практическая ценность крайне мала, тот же оператор typeof , который можно использовать всё для того же сравнения с undefined для всего остального он мало пригоден
Почему у Null и Undefined нет прототипа и почему у других типов они именно такие?
Здравствуйте
Разбираюсь с прототипами и возникают вопросы:
1. Почему у типов Null и Undefined нет прототипа? Вроде как всё создается конструкторами. Как посмотреть что у них внутри?
Вот примитивные типы JS
вот что показывает консоль для всех примитивных типов кроме Null и Udefined
те оно как бы и понятно, показывает функцию-конструктор, а вот при попытке написать Undefined или Null, говорит, что знать такого не знает.
Почему так?
- Вопрос задан более двух лет назад
- 118 просмотров
12 комментариев
Простой 12 комментариев
G F @fomenkogregory
Потому что в этом нет смысла. Прототипы содержат общие методы, у null и undefined нет методов.
G F @fomenkogregory
Да и вообще у примитивных типов нет конструкторов. У некоторых из них есть лишь объекты-обертки.
alexalexes @alexalexes
А зачем значениям, которые выступают в роли «затычек пустоты и неопределенности» прототипы?
Ostic @Ostic Автор вопроса
alexalexes, а каким образом они создаются тогда?
Ostic @Ostic Автор вопроса
G F,
как тогда вот это объяснить?
G F @fomenkogregory
Ostic, они не создаются, это просто значения
(. hope I’m right -_-)
G F @fomenkogregory
Ostic, это wrapper objects
Aetae @Aetae Куратор тега JavaScript
Ostic, при попытке вызова метода(/получении свойства) у примитива, примитив неявно оборачивается в соответствующий объект. ‘string’.charAt(0) -> new String(‘string’).charAt(0)
Нет соответствующего объекта — получи ошибку.
Естесно это всё на уровне самого языка и максимально оптимизировано. Явно этого делать не надо.
G F @fomenkogregory
У null и undefined их нет потому что в этом нет смысла
Ostic @Ostic Автор вопроса
G F, примитивы, они как бы и не примитивы
G F @fomenkogregory
Ostic, ок, 3 раз напишу — погугли wrapper objects. Впрочем Аетае написал уже
dmitry-toster @dmitry-toster
Почему у Null и Undefined нет прототипа
дык потому что прототип есть только у объектов
Решения вопроса 1
Дмитрий Беляев @bingo347 Куратор тега JavaScript
Crazy on performance.
Потому что прототипы есть только у объектов, то есть у сущностей (entity) для которых верно typeof entity === ‘object’ Правда тут есть одно исключение — в спеке нет типа function, а во всех реализациях он есть по историческим причинам. То есть с точки зрения спеки: typeof function()<> === ‘object’ а на деле: typeof function()<> === ‘function’ Поэтому правильное тождество будет такое:
typeof entity === 'object' || typeof entity === 'function'
У остальных типов прототипа нет, в чем можно легко убедится
1 instanceof Number 1 instanceof Object 'a' instanceof String 'a' instanceof Object true instanceof Boolean true instanceof Object 1n instanceof BigInt 1n instanceof Object Symbol() instanceof Symbol Symbol() instanceof Object null instanceof Object undefined instanceof Object
все эти выражения ложны, а как известно instanceof проверяет именно прототипы.
А для того чтоб работали методы для большинства этих типов есть объектные обертки, к которым присутствует неявное приведение при обращении к свойствам через точку или квадратные скобки. Эти обертки не сложно получить передав данные примитивы в Object как функцию, а не как конструктор:
Object(1) instanceof Number Object(1) instanceof Object Object('a') instanceof String Object('a') instanceof Object Object(true) instanceof Boolean Object(true) instanceof Object Object(1n) instanceof BigInt Object(1n) instanceof Object Object(Symbol()) instanceof Symbol Object(Symbol()) instanceof Object
все эти выражения истинны.
Однако надо понимать, что обертка — это уже не примитив:
typeof Object(1) === 'object' typeof Object('a') === 'object' typeof Object(true) === 'object' typeof Object(1n) === 'object' typeof Object(Symbol()) === 'object'
это все так же истинно.
А вот у юнит-типов (типов-значений) null и undefined таких оберток нет. И хотя Object(null) и Object(undefined) возвращают просто пустой объект, обратится к методам null и undefined нельзя:
null.property // TypeError: Cannot read property 'property' of null undefined.property // TypeError: Cannot read property 'property' of undefined
Определите, является ли переменная нулевой или неопределенной в JavaScript
В этом посте мы обсудим, как проверить, является ли переменная нулевой или неопределенной в JavaScript.
Есть 7 ложные значения в JavaScript – false , 0 , 0n , » , null , undefined а также NaN . Нулевое значение состоит либо из null или же undefined . Этот пост предоставит несколько альтернатив для проверки нулевых значений в JavaScript.
Чтобы проверить null переменные, вы можете использовать оператор строгого равенства ( === ), чтобы сравнить переменную с null . Это продемонстрировано ниже, где логическое выражение оценивается как true только для null и оценивает false для других ложных значений.
var x = null ;
if ( x === null ) <
console . log ( "variable is null" ) ;
Точно так же, чтобы проверить специально для undefined переменные, вы можете использовать оператор строгого равенства ( === ).
if ( x === undefined ) < console . log ( "variable is undefined" ) ;
Чтобы проверить, является ли переменная либо null или же undefined , вы можете объединить вышеуказанные условия. Следующий код демонстрирует это, где условный оператор выполняется только для null или же undefined ценности.
var x = null ;
if ( x === undefined || x === null ) <
console . log ( "Variable is either null or undefined" ) ;
Наконец, стандартный способ проверки null а также undefined заключается в сравнении переменной с null или же undefined используя оператор равенства ( == ). Это будет работать, так как null == undefined верно в JavaScript.
var x = undefined ;
if ( x == null ) <
console . log ( "Variable is either null or undefined" ) ;
Это все о проверке того, является ли переменная нулевой или неопределенной в JavaScript.
Оценить этот пост
Средний рейтинг 4.58 /5. Подсчет голосов: 26
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
1 Комментарий
Большинство голосов
Новейшие Самый старый
Встроенные отзывы
Просмотреть все комментарии
Просмотр комментариев
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно