Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Типы данных (переменных) в Javascript, Преобразование ,Оператор получения типа typeof

Лекция



Привет, сегодня поговорим про типы данных в javascript, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое типы данных в javascript, типы переменных в javascript, оператор получения типа, typeof, преобразование типов, ложноподобное значение, истинноподобное значение, falsy, truthy , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).

В JavaScript существует несколько основных типов данных(типов переменных).

Типы данных


Тип данных – пометка для компьютера как относиться к тем или иным данным (переменным) и какие операции с ними возможно проводить.
Тип определяет возможные значения и их смысл, а также операции которое возможны над этим типом данных.Разные типы требуют разного подхода.

В JS отсутствует жесткая типизация данных, при которой тип переменной определяется при ее объявлении. В JS тип
переменной определяется при присвоении ей значения. И может меняться при каждом новом присвоении. Мы можем узнать тип
переменной воспользовавшись функцией typeof.

Типы данных (переменных) в Javascript,  Преобразование ,Оператор получения типа typeof

1. Об этом говорит сайт https://intellect.icu . Число number:

var n = 123;
n = 12.345;

Единый тип число используется как для целых, так и для дробных чисел.

Существуют специальные числовые значения Infinity (бесконечность) и NaN (ошибка вычислений). Они также принадлежат типу «число».

Например, бесконечность Infinity получается при делении на ноль:

1 alert( 1 / 0 ); // Infinity

Ошибка вычислений NaN будет результатом некорректной математической операции, например:

1 alert( "нечисло" * 2 ); // NaN, ошибка

2. Строка string:

var str = "Мама мыла раму";
str = 'Одинарные кавычки тоже подойдут';

В JavaScript одинарные и двойные кавычки равноправны. Можно использовать или те или другие.

Тип символ не существует, есть только строка

В некоторых языках программирования есть специальный тип данных для одного символа. Например, в языке С это char. В JavaScript есть только тип «строка» string. Что, надо сказать, вполне удобно..

3. Булевый (логический) тип boolean. У него всего два значения - true (истина) и false (ложь).

Как правило, такой тип используется для хранения значения типа да/нет, например:

var checked = true; // поле формы помечено галочкой
checked = false; // поле формы не содержит галочки

О нем мы поговорим более подробно, когда будем обсуждать логические вычисления и условные операторы.

В JS истинноподобное (truthy) значение — это значение, рассматривающиеся как true в булевом контексте. К истинноподобным значениям относятся все значения кроме ложноподобных значений. То есть все значения истинноподобны кроме false, 0, -0, 0n, "", null, undefined и NaN.

В булевых контекстах JSиспользует механизм приведения типов.

Примеры истинноподобных значений в JavaScript (которые будут принудительно приведены к true в булевых контекстах, выполняя таким образом содержимое блока if):

if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)

Оператор логического И, &&

Если первый операнд истинноподобен, то оператор логического И вернет второй операнд:

true && "dog"
// возвращает "dog"

[] && "dog"
// возвращает "dog"

Ложноподобное (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 ("")
Copy to Clipboard

Оператор логического И, &&

Если первый операнд ложноподобен, то он будет возвращен в качестве результата:

false && "dog"
// ↪ false

0 && "dog"
// ↪ 0

4. null — специальное значение. Оно имеет смысл «ничего». Значение null не относится ни к одному из типов выше, а образует свой отдельный тип, состоящий из единственного значенияnull:

var age = null;

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

В частности, код выше говорит о том, что возраст age неизвестен.

5. undefined — специальное значение, которое, как и null, образует свой собственный тип. Оно имеет смысл «значение не присвоено».

Если переменная объявлена, но в нее ничего не записано, то ее значение как раз и естьundefined:

1 var u;
2 alert(u); // выведет "undefined"

Можно присвоить undefined и в явном виде, хотя это делается редко:

var x = 123;
x = undefined;

В явном виде undefined обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную «пустого значения» используется null.

6. Объекты object.

Первые 5 типов называют «примитивными».

Особняком стоит шестой тип: «объекты». К нему относятся, например, даты, он используется для коллекций данных и для многого другого. Позже мы вернемся к этому типу и рассмотрим его принципиальные отличия от примитивов.

оператор получения типа typeof

Оператор получения типа typeof возвращает строку, описывающую тип данных операнда. Операнд, тип которого нужно узнать, помещают после этого оператора и заключают в круглые скобки:

s = typeof("str");

В результате выполнения этого выражения в переменной s окажется строка "string", обозначающая строковый тип.

Все значения, которые может вернуть оператор typeof, перечислены в табл. 14.8.

Таблица 14.8. Значения, возвращаемые оператором typeof

Тип переменной В JavaScript


В JavaScript отсутствует жесткая типизация данных, при которой тип переменной определяется при ее объявлении. В JavaScript тип переменной
определяется при присвоении ей значения. И может меняться при каждом новом присвоении.



Преобразование типов в JavaScript

В JavaScript есть три преобразования:

  1. Строковое преобразование.: String(value) – в строковом контексте или при сложении со строкой. Работает очевидным образом.
  2. Численное преобразование.: Number(value) – в численном контексте, включая унарный плюс +value. Происходит при сравнении разных типов, кроме строгого равенства.
  3. Преобразование к логическому значению. Boolean(value) – в логическом контексте, можно также сделать двойным НЕ: !!value.

Особым случаем является проверка равенства с null и undefined. Они равны друг другу, но не равны чему бы то ни было еще, этот случай прописан особо в спецификации.


Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки. Например, его производит функция alert.

var a = true;

alert( a ); // "true"

Можно также осуществить преобразование явным вызовом String(val):

alert( String(null) === "null" ); // true

Как видно из примеров выше, преобразование происходит наиболее очевидным способом, «как есть»: false становится "false", null"null", undefined"undefined" и т.п.

Также для явного преобразования применяется оператор "+", у которого один из аргументов строка. В этом случае он приводит к строке и другой аргумент, например:

alert( true + "test" ); // "truetest"
alert( "123" + undefined ); // "123undefined"

Численное преобразование

Численное преобразование происходит в математических функциях и выражениях, а также при сравнении данных различных типов (кроме сравнений ===, !==).

Для преобразования к числу в явном виде можно вызвать Number(val), либо, что короче, поставить перед выражением унарный плюс "+":

var a = +"123"; // 123
var a = Number("123"); // 123, тот же эффект
Значение Преобразуется в...
undefined NaN
null 0
true / false 1 / 0
Строка Пробельные символы по краям обрезаются.
Далее, если остается пустая строка, то 0, иначе из непустой строки "считывается" число, при ошибке результат NaN.

Например:

// после обрезания пробельных символов останется "123"
alert( +"   \n  123   \n  \n" ); // 123

Еще примеры:

  • Логические значения:

  • alert( +true ); // 1
    alert( +false ); // 0
  • Сравнение разных типов – значит численное преобразование:

    alert( "\n0 " == 0 ); // true

    При этом строка "\n0" преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается строка "0", которая равна 0.

  • С логическими значениями:

    alert( "\n" == false );
    alert( "1" == true );

    Здесь сравнение "==" снова приводит обе части к числу. В первой строке слева и справа получается 0, во второй 1.

Специальные значения

Посмотрим на поведение специальных значений более внимательно.

Интуитивно, значения null/undefined ассоциируются с нулем, но при преобразованиях ведут себя иначе.

Специальные значения преобразуются к числу так:

Значение Преобразуется в...
undefined NaN
null 0

Это преобразование осуществляется при арифметических операциях и сравнениях > >= < <=, но не при проверке равенства ==. Алгоритм проверки равенства для этих значений в спецификации прописан отдельно (пункт 11.9.3). В нем считается, что null и undefined равны "==" между собой, но эти значения не равны никакому другому значению.

Это ведет к забавным последствиям.

Например, null не подчиняется законам математики – он «больше либо равен нулю»: null>=0, но не больше и не равен:

alert( null >= 0 ); // true, т.к. null преобразуется к 0
alert( null > 0 ); // false (не больше), т.к. null преобразуется к 0
alert( null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.

Значение undefined вообще «несравнимо»:

alert( undefined > 0 ); // false, т.к. undefined -> NaN
alert( undefined == 0 ); // false, т.к. это undefined (без преобразования)
alert( undefined < 0 ); // false, т.к. undefined -> NaN

Для более очевидной работы кода и во избежание ошибок лучше не давать специальным значениям участвовать в сравнениях > >= < <=.

Используйте в таких случаях переменные-числа или приводите к числу явно.

Логическое преобразование

Преобразование к true/false происходит в логическом контексте, таком как if(value), и при применении логических операторов.

Все значения, которые интуитивно «пусты», становятся false. Их несколько: 0, пустая строка, null, undefined и NaN.

Остальное, в том числе и любые объекты – true.

Полная таблица преобразований:

Значение Преобразуется в...
undefined, null false
Числа Все true, кроме 0, NaN -- false.
Строки Все true, кроме пустой строки "" -- false
Объекты Всегда true

Для явного преобразования используется двойное логическое отрицание !!value или вызов Boolean(value).

Обратите внимание: строка "0" становится true

В отличие от многих языков программирования (например PHP), "0" в JavaScript является true, как и строка из пробелов:

alert( !!"0" ); // true
alert( !!" " ); // любые непустые строки, даже из пробелов - true!

Логическое преобразование интересно тем, как оно сочетается с численным.

Два значения могут быть равны, но одно из них в логическом контексте true, другое – false.

Например, равенство в следующем примере верно, так как происходит численное преобразование:

alert( 0 == "\n0\n" ); // true

… А в логическом контексте левая часть (0) даст false, правая ("\n0\n") – true, так как любая не пустая строка в логическом контексте равна true:

if ("\n0\n") {
  alert( "true, совсем не как 0!" );
}

С точки зрения преобразования типов в JavaScript это совершенно нормально. При сравнении с помощью «==» – численное преобразование, а в if – логическое, только и всего.

Операции и типы

Вау!! 😲 Ты еще не читал? Это зря!

К сожалению, в одной статье не просто дать все знания про типы данных в javascript. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое типы данных в javascript, типы переменных в javascript, оператор получения типа, typeof, преобразование типов, ложноподобное значение, истинноподобное значение, falsy, truthy и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

создано: 2014-10-07
обновлено: 2023-05-14
132462



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)