Skip to the content.

JavaScript-ի զվարճալի տարօրինակությունները։ Մաս 3

Այսօր մենք կանդրադառնանք JavaScript-ի ևս մի զվարճալի տարօրինակության, որը սակայն ավելի խորությամբ նայելու դեպքում կհասկանանք, որ այն լրիվ հասկանալի և կանխատեսելի վարքագիծ է։ Եվ այսպես, եթե կոնսոլում փորձենք արտածել հետևյալ արտահայտության արժեքը՝

console.log(parseInt(null, 24));

ապա կստանանք 23, ինչն առաջին հայացքից այնքան էլ հասկանալի չէ, ինչու՞ և ո՞րտեղից։ Հասկանալու համար բերեք ավելի մանրամասն դիտարկենք parsInt ֆունկցիայի աշխատանքը։ MDN-ում նկարագրված է parsInt ֆունկցիան, որտեղ ասվում է, որ այն որպես առաջին արգումենտ ստանում է string, և վերադարձնում է թիվ, համապատասխան այն հաշվարկման համակարգի, որը մենք տալիս ենք որպես երկրորդ արգումենտ։ Ահա սինթաքսը՝

parseInt(string, radix);

parsInt ֆունկցիան փորձում է սիմվոլ առ սիմվոլ առաջին արգումենտից կարդալ, առանձնացել թվերը։ Երբ նա հանդիպում է սիմվոլի, որը նշված հաշվարկման համակարգում իրենից թիվ չի ներկայացնում, ապա վերադարձնում է մինչ այդ սիմվոլը առանձնացրած թվերը։

Եթե հենց առաջին իսկ սիմվոլը չի հանդիսանում թիվ, ապա ֆունկցիան վերադարձնում է NaN: Օրինակ՝

Հիմա արդեն, երբ մանրամասն ծանոթացանք parsInt ֆունկցիայի աշխատանքի հետ, բերեք հասկանանք մեր օրինակի տրամաբանությունը։ Սկսենք նրանից, որ մենք որպես առաջին արգումենտ, ֆունկցիային տվել ենք null արժեքը, իսկ վերևում արդեն նշել եմ, որ parsInt-ը որպես առաջին արգումենտ ընդունում է միայն String տիպին պատկանող արժեքներ, իսկ այլ արժեքների դեպքում կատարվում է անուղղակի վերափոխում և արդյունքում այն այնուամենայնիվ վերածվում է String տիպի։ Ահա թե ինչ է կատարվում․

parseInt(null, 24) === parseInt("null", 24);

Հաջորդը հասկանանք թե ինչ է իրենից ներկայացնում որպես երկրորդ արգումենտ (radix) հաղորդած 24 թիվը։ Այն նշանակում է, որ մենք ուզում ենք ֆունկցիան իր գործառույթը իրականացնի,որպես հաշվարկի հիմք ընդունելով 24-ական համակարգը։ Իսկ 24-ական համակարգը դա 0 - 9 թվերի և անգլերենի այբուբենի A-ից մինչև N թվերի համախումբն է։ Օրինակ 24-ական համակարգի “LM” թիվը դա տասական համակարգի 526 թիվն է։

parsInt ֆունկցիան սկսում է 24-ական համակարգի վրա հենվելով հերթով ստուգել “null” տողի սիմվոլները, թվային համապատասխանություններ գտնելու համար։ Առաջին սիմվոլը՝ “n”-ն,համապատասխանում է տասական համակարգի 23 թվին։ Հաջորդ սիմվոլը՝ “u”-ն, 24-ական հաշվարկի համակարգում ոչ մի թվի չի համապատասխանում, հետևաբար ֆունկցիան դադարեցնում է աշխատանքը, և վերադարձնում է “n”-ի տասական արժեքը՝ 23 թիվը։

Այսպիսի «տարօրինակություններ» JavaScript-ում շատ կան։ Բայց իրականում դրանք տարօրինակություններ չեն, այլ կուռ հիմնավորված, համակարգված լեզվական առանձնահատկություններ են, որոնք անհրաժեշտ է հասկանալ։ Իսկ խորությամբ հասկանալով ավելի շատ կսիրեք այս իրոք յուրօրինակ ու զարմանահրաշ ծրագրավորման լեզուն։