Аўтаматычнае пераўтварэнне тыпаў даных
Як вы ўжо ведаеце, радкі ў JavaScript варта браць у двукоссі. Можа быць такое, што ўсімі сімваламі радка будуць лічбы:
let a = '123';
У гэтым выпадку зменная a таксама з'яўляецца
радком, але з некаторым нюансам.
Сутнасць нюансу ў наступным: калі над радком з лічбамі выканаць якую-небудзь матэматычную аперацыю - гэтая аперацыя будзе выканана так, быццам у нас сапраўды лікі, а не радкі:
alert('2' * '3'); // выведзе 6
У гэтым выпадку JavaScript бачыць, што мы спрабуем выканаць недапушчальную для радкоў, але дапушчальную для лікаў аперацыю.
Ён таксама бачыць, што фактычна нашы радкі - гэта лікі ў двукоссі. Таму JavaScript аўтаматычна выконвае пераўтварэнне гэтых радкоў у лікі і выконвае адпаведную матэматычную аперацыю над імі.
Такое працуе, калі ў нашых радках толькі
лічбы. Калі там будзе хаця б адна літара
- JavaScript палічыць аперацыю некарэктнай
і зробіць яе вынікам значэнне NaN:
alert('2' * '3s'); // выведзе NaN
Акрамя таго, аўтаматычнае пераўтварэнне адбываецца, калі аперацыя матэматычна карэктная, але недапушчальная для радкоў.
Напрыклад, радкі нельга (а лікі можна) множыць, дзяліць, адымаць, таму ва ўсіх такіх аперацыях будзе аўтаматычнае пераўтварэнне радкоў з лічбамі ў лікі.
Аднак, радкі, як і лікі, складаюцца
з дапамогай аператара +. Гэта значыць,
што ў выпадку складання аўтаматычнага пераўтварэння
не будзе:
let a = '1' + '2';
alert(a); // выведзе '12' - адбылося складанне радкоў
Калі адно з дадаваемых лік, а другое - радок, то заўсёды перамагае радок:
let a = 1 + '2';
alert(a); // выведзе '12'
У такіх выпадках JavaScript, наадварот, аўтаматычна пераўтварае лікі ў радкі і выконвае складанне радкоў.
Ёсць, аднак, нюансы, калі дадаваемых больш, чым два: у гэтым выпадку пераўтварэнне ў пэўны тып залежыць ад парадку выканання аперацый.
У наступным прыкладзе спачатку 2 і 3
складуцца як лікі, а затым вынік дадасца
да радка '1' ужо як радок '5',
што ў выніку дасць радок '15':
let a = '1' + (2 + 3);
alert(a); // выведзе '15'
Калі ж прыбраць дужкі, то ўсё будзе складацца
злева направа. Гэта значыць спачатку да радка '1'
дадасца лік 2 і ў выніку
атрымаецца радок '12'. Затым да гэтага
радка дадасца лік 3 і ў выніку
атрымаецца радок '123':
let a = '1' + 2 + 3;
alert(a); // выведзе '123'
А вось у наступным прыкладзе лікі 2
і 3 напісаны ў пачатку, таму спачатку
яны складуцца як лікі, даўшы ў выніку
лік 5, а затым да гэтага ліку дадасца
радок '1', даўшы ў выніку радок '51':
let a = 2 + 3 + '1';
alert(a); // выведзе '51'
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' + '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' + 2;
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = 5 + '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = 5 + 2;
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' * '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' - '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' / '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' % '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5s' * '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5s' + '2';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = (-'5') + (-'2');
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' * 1 + '2' * 1;
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '5' * '1' + '2' * '1';
alert(a);
Не запускаючы код, вызначыце, што выведзецца на экран:
let a = '' + 3 + 1;
alert(a);