Аутоматска конверзија типова података
Као што већ знате, стрингове у 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);