Вам бонус- начислено 1 монета за дневную активность.
Сейчас у вас 1 монета
Типы данных (переменных) в Javascript, Преобразование ,Оператор получения типа typeof
Лекция
Привет, сегодня поговорим про типы данных в javascript, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое
типы данных в javascript, типы переменных в javascript, оператор получения типа, typeof, преобразование типов, ложноподобное значение, истинноподобное значение, falsy, truthy , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).
В JavaScript существует несколько основных типов данных(типов переменных).
Типы данных
Тип данных – пометка для компьютера как относиться к тем или иным данным (переменным) и какие операции с ними возможно проводить.
Тип определяет возможные значения и их смысл, а также операции которое возможны над этим типом данных.Разные типы требуют разного подхода.
В JS отсутствует жесткая типизация данных, при которой тип переменной определяется при ее объявлении. В JS тип
переменной определяется при присвоении ей значения. И может меняться при каждом новом присвоении. Мы можем узнать тип
переменной воспользовавшись функцией typeof.
1. Об этом говорит сайт https://intellect.icu . Число number:
varn = 123;
n = 12.345;
Единый тип число используется как для целых, так и для дробных чисел.
Существуют специальные числовые значения Infinity (бесконечность) и NaN (ошибка вычислений). Они также принадлежат типу «число».
Например, бесконечность Infinity получается при делении на ноль:
1
alert( 1 / 0 ); // Infinity
Ошибка вычислений NaN будет результатом некорректной математической операции, например:
1
alert( "нечисло"* 2 ); // NaN, ошибка
2. Строка string:
varstr = "Мама мыла раму";
str = 'Одинарные кавычки тоже подойдут';
В JavaScript одинарные и двойные кавычки равноправны. Можно использовать или те или другие.
Тип символ не существует, есть только строка
В некоторых языках программирования есть специальный тип данных для одного символа. Например, в языке С это char. В JavaScript есть только тип «строка» string. Что, надо сказать, вполне удобно..
3. Булевый (логический) тип boolean. У него всего два значения - true (истина) и false (ложь).
Как правило, такой тип используется для хранения значения типа да/нет, например:
varchecked = true; // поле формы помечено галочкой
checked = false; // поле формы не содержит галочки
О нем мы поговорим более подробно, когда будем обсуждать логические вычисления и условные операторы.
В JS истинноподобное (truthy) значение — это значение, рассматривающиеся как true в булевом контексте. К истинноподобным значениям относятся все значения кроме ложноподобных значений. То есть все значения истинноподобны кроме false, 0, -0, 0n, "", null, undefined и NaN.
В булевых контекстах JSиспользует механизм приведения типов.
Примеры истинноподобных значений в JavaScript (которые будут принудительно приведены к true в булевых контекстах, выполняя таким образом содержимое блока if):
Ложноподобное (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):
Если первый операнд ложноподобен, то он будет возвращен в качестве результата:
false && "dog"// ↪ false0 && "dog"// ↪ 0
4. null — специальное значение. Оно имеет смысл «ничего». Значение null не относится ни к одному из типов выше, а образует свой отдельный тип, состоящий из единственного значенияnull:
varage = null;
В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Это просто специальное значение, которое имеет смысл «ничего» или «значение неизвестно».
В частности, код выше говорит о том, что возраст age неизвестен.
5. undefined — специальное значение, которое, как и null, образует свой собственный тип. Оно имеет смысл «значение не присвоено».
Если переменная объявлена, но в нее ничего не записано, то ее значение как раз и естьundefined:
1
varu;
2
alert(u); // выведет "undefined"
Можно присвоить undefined и в явном виде, хотя это делается редко:
varx = 123;
x = undefined;
В явном виде undefined обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную «пустого значения» используется null.
6. Объекты object.
Первые 5 типов называют «примитивными».
Особняком стоит шестой тип: «объекты». К нему относятся, например, даты, он используется для коллекций данных и для многого другого. Позже мы вернемся к этому типу и рассмотрим его принципиальные отличия от примитивов.
оператор получения типа typeof
Оператор получения типа typeof возвращает строку, описывающую тип данных операнда. Операнд, тип которого нужно узнать, помещают после этого оператора и заключают в круглые скобки:
s = typeof("str");
В результате выполнения этого выражения в переменной s окажется строка "string", обозначающая строковый тип.
Все значения, которые может вернуть оператор typeof, перечислены в табл. 14.8.
В JavaScript отсутствует жесткая типизация данных, при которой тип переменной определяется при ее объявлении. В JavaScript тип переменной
определяется при присвоении ей значения. И может меняться при каждом новом присвоении.
Преобразование типов в JavaScript
В JavaScript есть три преобразования:
Строковое преобразование.: String(value) – в строковом контексте или при сложении со строкой. Работает очевидным образом.
Численное преобразование.: Number(value) – в численном контексте, включая унарный плюс +value. Происходит при сравнении разных типов, кроме строгого равенства.
Преобразование к логическому значению. 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" и т.п.
Также для явного преобразования применяется оператор "+", у которого один из аргументов строка. В этом случае он приводит к строке и другой аргумент, например:
Численное преобразование происходит в математических функциях и выражениях, а также при сравнении данных различных типов (кроме сравнений ===, !==).
Для преобразования к числу в явном виде можно вызвать Number(val), либо, что короче, поставить перед выражением унарный плюс "+":
var a =+"123";// 123var 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)
Комментарии
Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий,
не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
Комментарии
Оставить комментарий
Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)
Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)