ÐнаÑение в JavaScript вÑегда оÑноÑиÑÑÑ Ðº даннÑм опÑеделÑнного Ñипа. ÐапÑимеÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑока или ÑиÑло.
ÐÑÑÑ Ð²Ð¾ÑÐµÐ¼Ñ Ð¾ÑновнÑÑ Ñипов даннÑÑ Ð² JavaScript. Ð ÑÑой главе Ð¼Ñ ÑаÑÑмоÑÑим Ð¸Ñ Ð² обÑем, а в ÑледÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñим подÑобнее о каждом.
ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð² JavaScript Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð»ÑбÑе даннÑе. Родин Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñам Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑока, а в дÑÑгой â ÑиÑло:
// Ðе бÑÐ´ÐµÑ Ð¾Ñибкой
let message = "hello";
message = 123456;
ЯзÑки пÑогÑаммиÑованиÑ, в коÑоÑÑÑ Ñакое возможно, назÑваÑÑÑÑ Â«Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки ÑипизиÑованнÑми». ÐÑо знаÑиÑ, ÑÑо ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÐµÑÑÑ, но пеÑеменнÑе не пÑивÑÐ·Ð°Ð½Ñ Ð½Ð¸ к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· Ð½Ð¸Ñ .
ЧиÑло
let n = 123;
n = 12.345;
ЧиÑловой Ñип даннÑÑ
(number) пÑедÑÑавлÑÐµÑ ÐºÐ°Ðº ÑелоÑиÑленнÑе знаÑениÑ, Ñак и ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
СÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво опеÑаÑий Ð´Ð»Ñ ÑиÑел, напÑимеÑ, Ñмножение *, деление /, Ñложение +, вÑÑиÑание - и Ñак далее.
ÐÑоме обÑÑнÑÑ
ÑиÑел, ÑÑÑеÑÑвÑÑÑ Ñак назÑваемÑе «ÑпеÑиалÑнÑе ÑиÑловÑе знаÑениÑ», коÑоÑÑе оÑноÑÑÑÑÑ Ðº ÑÑÐ¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
: Infinity, -Infinity и NaN.
-
InfinityпÑедÑÑавлÑÐµÑ Ñобой маÑемаÑиÑеÑкÑÑ Ð±ÐµÑконеÑноÑÑÑ â. ÐÑо оÑобое знаÑение, коÑоÑое болÑÑе лÑбого ÑиÑла.ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ полÑÑиÑÑ ÐµÐ³Ð¾ в ÑезÑлÑÑаÑе Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° нолÑ:
alert( 1 / 0 ); // InfinityÐли задаÑÑ ÐµÐ³Ð¾ Ñвно:
alert( Infinity ); // Infinity -
NaNознаÑÐ°ÐµÑ Ð²ÑÑиÑлиÑелÑнÑÑ Ð¾ÑибкÑ. ÐÑо ÑезÑлÑÑÐ°Ñ Ð½ÐµÐ¿ÑавилÑной или неопÑеделÑнной маÑемаÑиÑеÑкой опеÑаÑии, напÑимеÑ:alert( "не ÑиÑло" / 2 ); // NaN, Ñакое деление ÑвлÑеÑÑÑ Ð¾ÑибкойÐнаÑение
NaN«пÑилипÑиво». ÐÑÐ±Ð°Ñ Ð¼Ð°ÑемаÑиÑеÑÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑNaNвозвÑаÑаеÑNaN:alert( NaN + 1 ); // NaN alert( 3 * NaN ); // NaN alert( "не ÑиÑло" / 2 - 1 ); // NaNÐÑли где-Ñо в маÑемаÑиÑеÑком вÑÑажении еÑÑÑ
NaN, Ñо оно ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° веÑÑ ÑезÑлÑÑÐ°Ñ (еÑÑÑ ÑолÑко одно иÑклÑÑение:NaN ** 0Ñавно1).
ÐаÑемаÑиÑеÑкие опеÑаÑии в JavaScript «безопаÑнÑ». ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ делаÑÑ ÑÑо Ñгодно: делиÑÑ Ð½Ð° нолÑ, обÑаÑаÑÑÑÑ Ñ Ð½ÐµÑиÑловÑми ÑÑÑоками как Ñ ÑиÑлами и Ñ.д.
СкÑÐ¸Ð¿Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не оÑÑановиÑÑÑ Ñ ÑаÑалÑной оÑибкой (не «ÑмÑÑÑ»). Ð Ñ
ÑдÑем ÑлÑÑае Ð¼Ñ Ð¿Ð¾Ð»ÑÑим NaN как ÑезÑлÑÑÐ°Ñ Ð²ÑполнениÑ.
СпеÑиалÑнÑе ÑиÑловÑе знаÑÐµÐ½Ð¸Ñ Ð¾ÑноÑÑÑÑÑ Ðº ÑÐ¸Ð¿Ñ Â«ÑиÑло». ÐонеÑно, ÑÑо не ÑиÑла в пÑивÑÑном знаÑении ÑÑого Ñлова.
ÐодÑобнее о ÑабоÑе Ñ ÑиÑлами Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñим в главе ЧиÑла.
BigInt
Ð JavaScript Ñип number не Ð¼Ð¾Ð¶ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно ÑабоÑаÑÑ Ñ ÑиÑлами, болÑÑими, Ñем (253-1) (Ñ. е. 9007199254740991) или менÑÑими, Ñем -(253-1) Ð´Ð»Ñ Ð¾ÑÑиÑаÑелÑнÑÑ
ÑиÑел.
ÐÑли говоÑиÑÑ ÑовÑем ÑоÑно, Ñо, ÑеÑ
ниÑеÑки, Ñип number Ð¼Ð¾Ð¶ÐµÑ Ñ
ÑаниÑÑ Ð±Ð¾Ð»ÑÑие ÑелÑе ÑиÑла (до 1.7976931348623157 * 10308), но за пÑеделами безопаÑного диапазона ÑелÑÑ
ÑиÑел ±(253-1) бÑÐ´ÐµÑ Ð¾Ñибка ÑоÑноÑÑи, Ñак как не вÑе ÑиÑÑÑ Ð¿Ð¾Ð¼ÐµÑаÑÑÑÑ Ð² ÑикÑиÑованнÑÑ 64-биÑнÑÑ Ð¿Ð°Ð¼ÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ
ÑаниÑÑ Â«Ð¿ÑиблизиÑелÑное» знаÑение.
ÐапÑимеÑ, ÑÑи два ÑиÑла (пÑÑмо за пÑеделами безопаÑного диапазона) ÑовпадаÑÑ:
console.log(9007199254740991 + 1); // 9007199254740992
console.log(9007199254740991 + 2); // 9007199254740992
То еÑÑÑ Ð²Ñе неÑеÑнÑе ÑелÑе ÑиÑла, болÑÑие Ñем (253-1), вообÑе не могÑÑ Ñ
ÑаниÑÑÑÑ Ð² Ñипе number.
РболÑÑинÑÑве ÑлÑÑаев безопаÑного диапазона ÑиÑел Ð¾Ñ -(253-1) до (253-1) вполне доÑÑаÑоÑно, но иногда нам ÑÑебÑеÑÑÑ Ð²ÐµÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ дейÑÑвиÑелÑно гиганÑÑкиÑ
ÑелÑÑ
ÑиÑел без какиÑ
-либо огÑаниÑений или пÑопÑÑеннÑÑ
знаÑений внÑÑÑи него. ÐапÑимеÑ, в кÑипÑогÑаÑии или пÑи иÑполÑзовании меÑки вÑемени («timestamp») Ñ Ð¼Ð¸ÐºÑоÑекÑндами.
Тип BigInt бÑл добавлен в JavaScript, ÑÑÐ¾Ð±Ñ Ð´Ð°ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑабоÑаÑÑ Ñ ÑелÑми ÑиÑлами пÑоизволÑной длинÑ.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð·Ð½Ð°Ñение Ñипа BigInt, необÑ
одимо добавиÑÑ n в ÐºÐ¾Ð½ÐµÑ ÑиÑлового лиÑеÑала:
// Ñимвол "n" в конÑе ознаÑаеÑ, ÑÑо ÑÑо BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Так как необÑ
одимоÑÑÑ Ð² иÑполÑзовании BigIntâÑиÑел поÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑно Ñедко, Ð¼Ñ ÑаÑÑмоÑÑим иÑ
в оÑделÑной главе BigInt. ÐзнакомÑÑеÑÑ Ñ Ð½ÐµÐ¹, когда вам понадобÑÑÑÑ Ð½Ð°ÑÑолÑко болÑÑие ÑиÑла.
РданнÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ BigInt поддеÑживаеÑÑÑ ÑолÑко в бÑаÑзеÑаÑ
Firefox, Chrome, Edge и Safari, но не поддеÑживаеÑÑÑ Ð² IE.
СÑÑока
СÑÑока (string) в JavaScript должна бÑÑÑ Ð·Ð°ÐºÐ»ÑÑена в кавÑÑки.
let str = "ÐÑивеÑ";
let str2 = 'ÐдинаÑнÑе кавÑÑки Ñоже подойдÑÑ';
let phrase = `ÐбÑаÑнÑе кавÑÑки позволÑÑÑ Ð²ÑÑÑаиваÑÑ Ð¿ÐµÑеменнÑе ${str}`;
Ð JavaScript ÑÑÑеÑÑвÑÐµÑ ÑÑи Ñипа кавÑÑек.
- ÐвойнÑе кавÑÑки:
"ÐÑивеÑ". - ÐдинаÑнÑе кавÑÑки:
'ÐÑивеÑ'. - ÐбÑаÑнÑе кавÑÑки:
`ÐÑивеÑ`.
ÐвойнÑе или одинаÑнÑе кавÑÑки ÑвлÑÑÑÑÑ Â«Ð¿ÑоÑÑÑми», Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸ Ð½ÐµÑ ÑазниÑÑ Ð² JavaScript.
ÐбÑаÑнÑе же кавÑÑки имеÑÑ ÑаÑÑиÑеннÑÑ ÑÑнкÑионалÑноÑÑÑ. Ðни позволÑÑÑ Ð½Ð°Ð¼ вÑÑÑаиваÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑÑокÑ, заклÑÑÐ°Ñ Ð¸Ñ
в ${â¦}. ÐапÑимеÑ:
let name = "Ðван";
// ÐÑÑавим пеÑеменнÑÑ
alert( `ÐÑивеÑ, ${name}!` ); // ÐÑивеÑ, Ðван!
// ÐÑÑавим вÑÑажение
alert( `ÑезÑлÑÑаÑ: ${1 + 2}` ); // ÑезÑлÑÑаÑ: 3
ÐÑÑажение внÑÑÑи ${â¦} вÑÑиÑлÑеÑÑÑ, и его ÑезÑлÑÑÐ°Ñ ÑÑановиÑÑÑ ÑаÑÑÑÑ ÑÑÑоки. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ положиÑÑ ÑÑда вÑÑ, ÑÑо Ñгодно: пеÑеменнÑÑ name, или вÑÑажение 1 + 2, или ÑÑо-Ñо более Ñложное.
ÐбÑаÑиÑе внимание, ÑÑо ÑÑо можно делаÑÑ ÑолÑко в обÑаÑнÑÑ ÐºÐ°Ð²ÑÑÐºÐ°Ñ . ÐÑÑгие кавÑÑки не имеÑÑ Ñакой ÑÑнкÑионалÑноÑÑи вÑÑÑаиваниÑ!
alert( "ÑезÑлÑÑаÑ: ${1 + 2}" ); // ÑезÑлÑÑаÑ: ${1 + 2} (двойнÑе кавÑÑки ниÑего не делаÑÑ)
ÐÑ ÑаÑÑмоÑÑим ÑÑÑоки более подÑобно в главе СÑÑоки.
РнекоÑоÑÑÑ
ÑзÑкаÑ
, напÑÐ¸Ð¼ÐµÑ C и Java, Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñимвола, напÑÐ¸Ð¼ÐµÑ "a" или "%", ÑÑÑеÑÑвÑÐµÑ Ð¾ÑделÑнÑй Ñип. Ð ÑзÑкаÑ
C и Java ÑÑо char.
Ð JavaScript подобного Ñипа неÑ, еÑÑÑ ÑолÑко Ñип string. СÑÑока Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½Ð¾Ð»Ñ Ñимволов (бÑÑÑ Ð¿ÑÑÑой), один Ñимвол или множеÑÑво.
ÐÑлевÑй (логиÑеÑкий) Ñип
ÐÑлевÑй Ñип (boolean) Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ ÑолÑко два знаÑениÑ: true (иÑÑина) и false (ложÑ).
Такой Ñип, как пÑавило, иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений да/неÑ: true знаÑÐ¸Ñ Â«Ð´Ð°, пÑавилÑно», а false знаÑÐ¸Ñ Â«Ð½ÐµÑ, не пÑавилÑно».
ÐапÑимеÑ:
let nameFieldChecked = true; // да, поле оÑмеÑено
let ageFieldChecked = false; // неÑ, поле не оÑмеÑено
ÐÑлевÑе знаÑÐµÐ½Ð¸Ñ Ñакже могÑÑ Ð±ÑÑÑ ÑезÑлÑÑаÑом ÑÑавнений:
let isGreater = 4 > 1;
alert( isGreater ); // true (ÑезÑлÑÑаÑом ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ "да")
ÐÑ ÑаÑÑмоÑÑим бÑлевÑе знаÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подÑобно в главе ÐогиÑеÑкие опеÑаÑоÑÑ.
ÐнаÑение «null»
СпеÑиалÑное знаÑение null не оÑноÑиÑÑÑ Ð½Ð¸ к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· Ñипов, опиÑаннÑÑ
вÑÑе.
Ðно ÑоÑмиÑÑÐµÑ Ð¾ÑделÑнÑй Ñип, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ ÑолÑко знаÑение null:
let age = null;
Ð JavaScript null не ÑвлÑеÑÑÑ Â«ÑÑÑлкой на неÑÑÑеÑÑвÑÑÑий обÑекÑ» или «нÑлевÑм ÑказаÑелем», как в некоÑоÑÑÑ
дÑÑгиÑ
ÑзÑкаÑ
.
ÐÑо пÑоÑÑо ÑпеÑиалÑное знаÑение, коÑоÑое пÑедÑÑавлÑÐµÑ Ñобой «ниÑего», «пÑÑÑо» или «знаÑение неизвеÑÑно».
РпÑиведÑнном вÑÑе коде Ñказано, ÑÑо знаÑение пеÑеменной age неизвеÑÑно.
ÐнаÑение «undefined»
СпеÑиалÑное знаÑение undefined Ñакже ÑÑÐ¾Ð¸Ñ Ð¾ÑобнÑком. Ðно ÑоÑмиÑÑÐµÑ Ñип из Ñамого ÑÐµÐ±Ñ Ñак же, как и null.
Ðно ознаÑаеÑ, ÑÑо «знаÑение не бÑло пÑиÑвоено».
ÐÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±ÑÑвлена, но ей не пÑиÑвоено никакого знаÑениÑ, Ñо ÐµÑ Ð·Ð½Ð°Ñением бÑÐ´ÐµÑ undefined:
let age;
alert(age); // вÑÐ²ÐµÐ´ÐµÑ "undefined"
ТеÑ
ниÑеÑки Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пÑиÑвоиÑÑ Ð·Ð½Ð°Ñение undefined лÑбой пеÑеменной:
let age = 123;
// изменÑем знаÑение на undefined
age = undefined;
alert(age); // "undefined"
â¦Ðо Ñак делаÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ. ÐбÑÑно null иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿ÑиÑÐ²Ð¾ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной «пÑÑÑого» или «неизвеÑÑного» знаÑениÑ, а undefined â Ð´Ð»Ñ Ð¿ÑовеÑок, бÑла ли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñена.
ÐбÑекÑÑ Ð¸ ÑимволÑ
Тип object (обÑекÑ) â оÑобеннÑй.
ÐÑе оÑÑалÑнÑе ÑÐ¸Ð¿Ñ Ð½Ð°Ð·ÑваÑÑÑÑ Â«Ð¿ÑимиÑивнÑми», поÑÐ¾Ð¼Ñ ÑÑо Ð¸Ñ Ð·Ð½Ð°ÑениÑми могÑÑ Ð±ÑÑÑ ÑолÑко пÑоÑÑÑе знаÑÐµÐ½Ð¸Ñ (бÑÐ´Ñ Ñо ÑÑÑока, или ÑиÑло, или ÑÑо-Ñо еÑÑ). РобÑекÑÐ°Ñ Ð¶Ðµ Ñ ÑанÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑии даннÑÑ Ð¸Ð»Ð¸ более ÑложнÑе ÑÑÑÑкÑÑÑÑ.
ÐбÑекÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð²Ð°Ð¶Ð½Ð¾Ðµ меÑÑо в ÑзÑке и ÑÑебÑÑÑ Ð¾Ñобого вниманиÑ. ÐÑ ÑазбеÑÑмÑÑ Ñ Ð½Ð¸Ð¼Ð¸ в главе ÐбÑекÑÑ Ð¿Ð¾Ñле Ñого, как Ñзнаем болÑÑе о пÑимиÑÐ¸Ð²Ð°Ñ .
Тип symbol (Ñимвол) иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑникалÑнÑÑ
иденÑиÑикаÑоÑов в обÑекÑаÑ
. ÐÑ Ñпоминаем здеÑÑ Ð¾ нÑм Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑ ÐºÐ°ÑÑинÑ, изÑÑим ÑÑÐ¾Ñ Ñип поÑле обÑекÑов.
ÐпеÑаÑÐ¾Ñ typeof
ÐпеÑаÑÐ¾Ñ typeof возвÑаÑÐ°ÐµÑ Ñип аÑгÑменÑа. ÐÑо полезно, когда Ð¼Ñ Ñ
оÑим обÑабаÑÑваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑазлиÑнÑÑ
Ñипов по-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ пÑоÑÑо Ñ
оÑим ÑделаÑÑ Ð¿ÑовеÑкÑ.
У него еÑÑÑ Ð´Ð²Ðµ ÑинÑакÑиÑеÑкие ÑоÑмÑ:
// ÐбÑÑнÑй ÑинÑакÑиÑ
typeof 5 // ÐÑÐ²ÐµÐ´ÐµÑ "number"
// СинÑакÑиÑ, напоминаÑÑий вÑзов ÑÑнкÑии (вÑÑÑеÑаеÑÑÑ Ñеже)
typeof(5) // Также вÑÐ²ÐµÐ´ÐµÑ "number"
ÐÑли пеÑедаеÑÑÑ Ð²ÑÑажение, Ñо нÑжно заклÑÑаÑÑ ÐµÐ³Ð¾ в Ñкобки, Ñ.к. typeof Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокий пÑиоÑиÑеÑ, Ñем бинаÑнÑе опеÑаÑоÑÑ:
typeof 50 + " ÐваÑÑиÑ"; // ÐÑÐ²ÐµÐ´ÐµÑ "number ÐваÑÑиÑ"
typeof (50 + " ÐваÑÑиÑ"); // ÐÑÐ²ÐµÐ´ÐµÑ "string"
ÐÑÑгими Ñловами, Ñкобки Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа знаÑениÑ, коÑоÑое полÑÑилоÑÑ Ð² ÑезÑлÑÑаÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² Ð½Ð¸Ñ .
ÐÑзов typeof x возвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñипа:
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
ÐоÑледние ÑÑи ÑÑÑоки нÑждаÑÑÑÑ Ð² поÑÑнении:
Mathâ ÑÑо вÑÑÑоеннÑй обÑекÑ, коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð¼Ð°ÑемаÑиÑеÑкие опеÑаÑии и конÑÑанÑÑ. ÐÑ ÑаÑÑмоÑÑим его подÑобнее в главе ЧиÑла. ÐдеÑÑ Ð¾Ð½ ÑлÑÐ¶Ð¸Ñ Ð»Ð¸ÑÑ Ð¿ÑимеÑом обÑекÑа.- РезÑлÑÑаÑом вÑзова
typeof nullÑвлÑеÑÑÑ"object". ÐÑо оÑиÑиалÑно пÑÐ¸Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð¾Ñибка вtypeof, ведÑÑÐ°Ñ Ð½Ð°Ñало Ñ Ð²ÑемÑн ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ JavaScript и ÑÐ¾Ñ ÑанÑÐ½Ð½Ð°Ñ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи. ÐонеÑно,nullне ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом. ÐÑо ÑпеÑиалÑное знаÑение Ñ Ð¾ÑделÑнÑм Ñипом. - ÐÑзов
typeof alertвозвÑаÑаеÑ"function", поÑÐ¾Ð¼Ñ ÑÑоalertÑвлÑеÑÑÑ ÑÑнкÑией. ÐÑ Ð¸Ð·ÑÑим ÑÑнкÑии в ÑледÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ , где заодно Ñвидим, ÑÑо в JavaScript Ð½ÐµÑ ÑпеÑиалÑного Ñипа «ÑÑнкÑиÑ». ФÑнкÑии оÑноÑÑÑÑÑ Ðº обÑекÑÐ½Ð¾Ð¼Ñ ÑипÑ. ÐоtypeofобÑабаÑÑÐ²Ð°ÐµÑ Ð¸Ñ Ð¾ÑобÑм обÑазом, возвÑаÑаÑ"function". Так Ñоже повелоÑÑ Ð¾Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ JavaScript. ФоÑмалÑно ÑÑо невеÑно, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдобнÑм на пÑакÑике.
ÐÑого
Ð JavaScript еÑÑÑ 8 оÑновнÑÑ Ñипов даннÑÑ .
- Ð¡ÐµÐ¼Ñ Ð¸Ð· ниÑ
назÑваÑÑ Â«Ð¿ÑимиÑивнÑми» Ñипами даннÑÑ
:
numberÐ´Ð»Ñ Ð»ÑбÑÑ ÑиÑел: ÑелоÑиÑленнÑÑ Ð¸Ð»Ð¸ ÑиÑел Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой; ÑелоÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼Â±(253-1).bigintÐ´Ð»Ñ ÑелÑÑ ÑиÑел пÑоизволÑной длинÑ.stringÐ´Ð»Ñ ÑÑÑок. СÑÑока Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ болÑÑе Ñимволов, Ð½ÐµÑ Ð¾ÑделÑного ÑимволÑного Ñипа.booleanдлÑtrue/false.nullÐ´Ð»Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑнÑÑ Ð·Ð½Ð°Ñений â оÑделÑнÑй Ñип, имеÑÑий одно знаÑениеnull.undefinedÐ´Ð»Ñ Ð½ÐµÐ¿ÑиÑвоеннÑÑ Ð·Ð½Ð°Ñений â оÑделÑнÑй Ñип, имеÑÑий одно знаÑениеundefined.symbolÐ´Ð»Ñ ÑникалÑнÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов.
- Родин не ÑвлÑеÑÑÑ Â«Ð¿ÑимиÑивнÑм» и ÑÑÐ¾Ð¸Ñ Ð¾ÑобнÑком:
objectÐ´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ ÑложнÑÑ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ .
ÐпеÑаÑÐ¾Ñ typeof позволÑÐµÑ Ð½Ð°Ð¼ ÑвидеÑÑ, какой Ñип даннÑÑ
ÑоÑ
ÑанÑн в пеÑеменной.
- ÐÐ¼ÐµÐµÑ Ð´Ð²Ðµ ÑоÑмÑ:
typeof xилиtypeof(x). - ÐозвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñипа. ÐапÑимеÑ,
"string". - ÐлÑ
nullвозвÑаÑаеÑÑÑ"object"â ÑÑо оÑибка в ÑзÑке, на Ñамом деле ÑÑо не обÑекÑ.
Ð ÑледÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ Ð¼Ñ ÑконÑенÑÑиÑÑемÑÑ Ð½Ð° пÑимиÑивнÑÑ Ð·Ð½Ð°ÑениÑÑ , а когда познакомимÑÑ Ñ Ð½Ð¸Ð¼Ð¸, пеÑейдÑм к обÑекÑам.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)