Сборка от 17 марта 2017 г


Преобразование типов для примитивов



Download 9,9 Mb.
bet44/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   40   41   42   43   44   45   46   47   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Преобразование типов для примитивов


Система преобразования типов в JavaScript очень проста, но отличается от других языков. Поэтому она часто служит «камнем преткновения» для приходящих из других языков программистов.


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



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

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

  3. Преобразование к логическому значению.



Эта глава описывает преобразование только примитивных значений, объекты разбираются далее.


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

Строковое преобразование происходит, когда требуется представление чего‑либо в виде строки. Например, его производит функция 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


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

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





Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   40   41   42   43   44   45   46   47   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish