какие значения в js являются ложными
Для проверки значений на их истинность или ложность можно использовать двойное отрицание !! .
Итак, следующие значения будут приведены к false :
- собственно, false :
console.log(!!false); // => false
console.log(!!0); // => false
- пустая строка » :
console.log(!!''); // => false
- undefined :
console.log(!!undefined); // => false
console.log(!!null); // => false
console.log(!!NaN); // => false
Нужно помнить, что пустая функция, а также пустой объект и пустой массив будут приведены к true :
console.log(!!(() => <>)); // => true console.log(!!<>); // => true console.log(!![]); // => true
Ложноподобное значение
Ложноподобное (falsy) значение — значение, которое становится false в булевом контексте.
JavaScript использует преобразование типов, чтобы привести значение к булевому типу, там, где это требуется (например, в условных конструкциях и циклах.
В следующей таблице приведен полный список ложноподобных значений JavaScript:
Значение | Описание |
---|---|
false | Ключевое слово false . |
0 | Ноль Number (к нему также относятся 0.0 , 0x0 и т.д.). |
-0 | Отрицательный ноль типа Number (к нему также относятся -0.0 , -0x0 и т.д.). |
0n | Ноль типа BigInt (также 0x0n ). Обратите внимание, что не может быть негативного нуля типа BigInt — отрицательный 0n равняется 0n . |
«» , » , « | Значение, содержащее пустую строку . |
null | null — отсутствие какого-либо значения. |
undefined | undefined — примитивное значение. |
NaN (en-US) | NaN — значение, не являющиеся числом. |
document.all | Объекты считаются ложноподобными тогда и только тогда, когда у них есть внутренний слот [[IsHTMLDDA]]. Этот слот есть только в объекте document.all , и его нельзя задать через JavaScript. |
Примеры
Примеры ложноподобных значений в JavaScript (которые в булевых контекстах принудительно приводятся к false и таким образом минуют блок if ):
if (false) if (null) if (undefined) if (0) if (-0) if (0n) if (NaN) if ("")
Оператор логического И, &&
Если первый операнд ложноподобен, то он будет возвращён в качестве результата:
false && "dog"; // ↪ false 0 && "dog"; // ↪ 0
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
JavaScript: Предикаты
Подобные функции называют предикатами. Функции-предикаты (или функции-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо true , либо false .
Предикаты во всех языках принято именовать особым образом для простоты анализа. В JavaScript предикаты, как правило, начинаются с префикса is , has или can , но не ограничены этими словами. Примеры:
- isInfant() — «младенец ли?»
- hasChildren() — «есть ли дети?»
- isEmpty() — «пустой ли?»
- hasErrors() — «есть ли ошибки?»
Функция может считаться предикатом только если она возвращает boolean.
Давайте напишем ещё одну функцию-предикат. Она принимает строку и проверяет, является ли она словом ‘Castle’ :
const isCastle = (type) => type === 'Castle'; console.log(isCastle('Sea'));
false
Задание
Напишите функцию isMister() , которая принимает строку и проверяет, является ли она словом ‘Mister’ .
isMister('Mister'); // true isMister('Miss'); // false
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Предикат — выражение, отвечающее на вопрос «да» или «нет» с помощью типа boolean.
Какие из перечисленных значений являются falsy js
Все используемые данные в javascript имеют определенный тип. В JavaScript имеется восемь типов данных:
- String : представляет строку
- Number : представляет числовое значение
- BigInt : предназначен для представления очень больших целых чисел
- Boolean : представляет логическое значение true или false
- Undefined : представляет одно специальное значение — undefined и указывает, что значение не установлено
- Null : представляет одно специальное значение — null и указывает на отсутствие значения
- Symbol : представляет уникальное значение, которое часто применяется для обращения к свойствам сложных объектов
- Object : представляет комплексный объект
Первые семь типов представляют примитивные типы данных. Последний тип — Object представляет сложный, комплексный тип данных, который состоит из значений примитивных типов или других объектов. Рассмотрим основные примитивные типы данных.
Числовые данные
Number
Тип Number представляет числа в JavaScript, которые могут быть целыми или дробными:
- Целые числа, например, 35. Мы можем использовать как положительные, так и отрицательные числа. Диапазон используемых чисел: от -2 53 до 2 53
- Дробные числа (числа с плавающей точкой). В качестве разделителя дробной и целой части применяется точка, например, 3.5575 . Опять же можно использовать как положительные, так и отрицательные числа. Для чисел с плавающей точкой используется тот же диапазон: от -2 53 до 2 53
const x = 45; const y = 123.897; const z = -0.123;
JavaScript поддерживает возможность определять числа в двоичной, восьмеричной и шестнадцатеричной системах, что очень удобно, если нам предстоить проводить поразрядные операции с отдельными битами числа. Для определения числа в двоичной системе, перед числом указывается префикс 0b :
const num1 = 0b1011; // число 11 в десятичной системе console.log(num1); // 11
В данном случае константа num1 равна 0b1011 , что в десятичной системе эквивалентно 11.
Для определения числа в восьмеричной системе, перед числом указывается префикс 0o :
const num1 = 0o11; // число 9 в десятичной системе console.log(num1); // 9
Для определения числа в шестнадцатеричной системе, перед числом указывается префикс 0x :
const num1 = 0xff; // число 255 в десятичной системе console.log(num1); // 255 const num2 = 0x1A; // число 26 в десятичной системе console.log(num2); // 26
Начиная со стандарта ECMA2021 в JavaScript для увеличения читабельности в качестве разделителя между разрядами можно использовать символ подчеркивания _:
const num1 = 1234567; const num2 = 123_4567; // число равное num1 const num3 = 1234567890; const num4 = 12_3456_7890; // число равное num3
Тип BigInt
Тип BigInt добавлен в последних стандартах JavaScript для представления очень больших целых чисел, которые выходят за пределы диапазона типа number. Это не значит, что мы не можем совсем работать с большими числами с помощью типа number, но работа с ними в случае с типом number будет сопряжена с проблемами. Рассмотрим небольшой пример:
let num = 9007199254740991 console.log(num); // 9007199254740991 console.log(num + 1); // 9007199254740992 console.log(num + 2); // 9007199254740992
Здесь переменной num присваивается максимальное значение. И далее прибавляем к ней некоторые значения и выводим на консоль результат. И результаты могут нас смутить, особенно в случае прибавления числа 2.
Стоит отметить, что тип Number ограничен, хотя и позволяет оперировать довольно большим диапазоном чисел. В частности, мы можем использовать специальные константы Number.MIN_VALUE и Number.MAX_VALUE для проверки минимального и максимального возможных значений для типа Number:
console.log(Number.MIN_VALUE); // 5e-324 console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
Например, рассмотрим следующий пример:
const num = 9223372036854775801; console.log(num); // 9223372036854776000
В силу ограничений типа Number на консоли мы увидим несколько другое число, нежели мы присвоили константе num. Это может негативно влиять на точность в вычислениях. И для подобных подобных чисел как раз предназначен тип BigInt . Для определения числа как значения типа BigInt в конце числа добавляется суффикс n :
let dimension = 19007n; const value = 2545n;
Например, изменим из предыдущего примера тип number на bigint:
const num = 9223372036854775801n; console.log(num); // 9223372036854775801n
Теперь консоль выводит корректный результат.
Тип Boolean
Тип Boolean представляет булевые или логические значения true (верно) и false (ложно):
const isAlive = true; const isDead = false;
Строки String
Тип String представляет строки. Для определения строк применяются кавычки, причем, можно использовать как двойные, так одинарные, так и косые кавычки. Единственно ограничение: тип закрывающей кавычки должен быть тот же, что и тип открывающей, то есть либо обе двойные, либо обе одинарные.
const user = "Tom"; const company = 'Microsoft'; const language = `JavaScript`; console.log(user); console.log(company); console.log(language);
Если внутри строки встречаются кавычки, то мы их должны экранировать слешем. Например, пусть у нас есть текст «Бюро «Рога и копыта»» . Теперь экранируем кавычки:
const company = "Бюро \"Рога и копыта\"";
Также мы можем внутри стоки использовать другой тип кавычек:
constcompany1 = "Бюро 'Рога и копыта'"; const company2 = 'Бюро "Рога и копыта"';
Также строка может содержать специальные символы — управляющие последовательности, которые интерпретируются определенным образом. Самые распространенные последовательности — это «\n» (перевод на другую строку) и «\t» (табуляция). Например:
const text = "Hello METANIT.COM\nHello\tWorld"; console.log(text);
При выводе на консоль текст из константы text будет интерпретироваться следующим образом:
Hello METANIT.COM Hello World
Интерполяция
Использование косых кавычек позволяет нам применять такой прием как интерполяция — встраивать данные в строку. Например:
const user = "Tom"; const text = `Name: $`; console.log(text); // Name: Tom
Для встраивания значений выражений (например, значений других переменных и констант) в строку перед выражением ставится знак доллара $ , после которого в фигурных скобках указывается выражение. Так, в примере выше $ означает, что в этом месте строки надо встроить значение переменной user .
Подобным образом можно встраивать и больше количество данных:
const user = "Tom"; const age = 37; const isMarried = false; const text = `Name: $ Age: $ IsMarried: $`; console.log(text); // Name: Tom Age: 37 IsMarried: false
Кроме интерполяции косые кавычки позволяют определять многострочный текст:
const text = `Мы все учились понемногу Чему-нибудь и как-нибудь, Так воспитаньем, слава богу, У нас немудрено блеснуть.`; console.log(text);
Консольный вывод браузера:
Мы все учились понемногу Чему-нибудь и как-нибудь, Так воспитаньем, слава богу, У нас немудрено блеснуть.
null и undefined
undefined указывает, что значение не определено или не установлено. Например, когда мы только определяем переменную без присвоения ей начального значения, она представляет тип undefined:
let email; console.log(email); // выведет undefined
Присвоение значение null означает, что у переменной отсутствует значение:
let email; console.log(email); // undefined email = null; console.log(email); // null
Стоит отметить, что хотя в принципе можно переменной присвоить значение undefined , как в следующем случае:
let email = "tome@mimimail.com"; email = undefined; // установим тип undefined console.log(email); // undefined
Но основной смысл undefined состоит в том, что переменная неинициализирована, что обычно происходит до первого присвоения ей какого-либо значения. Поэтому обычно не предполагается, что переменной явным образом будет присваиваться значение undefined . В тоже время этот тип может быть полезен — мы можем использовать его на проверку инициализации переменной. Но если же нам надо указать, что у переменной нет никакого значения, то ей присваивается null , а не undefine .
object
Тип object представляет сложный объект. Простейшее определение объекта представляют фигурные скобки:
const user = <>;
Объект может иметь различные свойства и методы:
const user = ; console.log(user.name);
В данном случае объект называется user, и он имеет два свойства: name и age, которые в качестве значения принимают данные других типов. Это краткое описание объектов, более подробно объекты мы рассморим в последующих статьях.
Слабая/динамическая типизация
JavaScript является языком со слабой и динамической типизацией. Это значит, что переменные могут динамически менять тип. Например:
let id; // тип undefined console.log(id); id = 45; // тип number console.log(id); id = "45"; // тип string console.log(id);
Несмотря на то, что во втором и третьем случае консоль выведет нам число 45, но во втором случае переменная id будет представлять число, а в третьем случае — строку.
Оператор typeof
С помощью оператора typeof можно получить тип переменной, что может быть полезно, когда в зависимости от типа переменной необходимо выполнить те или иные действия:
let id; console.log(typeof id); // undefined id = 45; console.log(typeof id); // number id = 45n; console.log(typeof id); // bigint id = "45"; console.log(typeof id); // string
Стоит отметить, что для значения null оператор typeof возвращает значение «object», несмотря на то, что согласно спецификации JavaScript значение null представляет отдельный тип.