рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдмрд┐рдЧ рд╣реЛрд▓ рдкреВрд░рд╛ рдХреНрдпреЛрдВ


рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЖрджрд┐рдо BigInt рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ ред рдкреНрд░реЗрд░рдгрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╣реА рдмрддрд╛рдИ рдЧрдИ рд╣реИ / рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИ ред рдФрд░ рдореИрдВ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд TypeError рдореЗрдВ рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╕реНрдерд╛рдиреАрдп "рдЦреЛрдЬрдХрд░реНрддрд╛" рдкрд░ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдХреНрдпрд╛ рд╣рдо рдбрд╛рдБрдЯреЗрдВрдЧреЗ рдпрд╛ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдХреНрд╖рдорд╛ рдХрд░реЗрдВрдЧреЗ (рдлрд┐рд░ рд╕реЗ)?

рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?


рдЬрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдореНрдореЗрд▓рди рдХрд╛ рдПрдХ рдореЗрдо рдмрди рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реИрдВ:

1 + {}; // '1[object Object]' 1 + [[0]]; // '10' 1 + new Date; // '1Fri Feb 08 2019 00:32:57 GMT+0300 (,  )' 1 - new Date; // -1549616425060 ... 

рд╣рдореЗрдВ рдЕрдЪрд╛рдирдХ рдПрдХ рдЯрд╛рдЗрдкрд░реНрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рджреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ:

 1 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions 

рдФрд░ рдЕрдЧрд░ рдирд┐рд╣рд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдиреЗ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдореА рдирд╣реАрдВ рдХреА, рддреЛ рдИрд╕реАрдПрдордП рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдХреЛ рддреЛрдбрд╝рдиреЗ рдФрд░ рдХреБрдЫ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рдореМрдХрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд╛рд╖рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ "рдЯреНрд░реЛрд▓" рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИ:

 1n + '1'; // '11' 

рдЕрд░реЗ рд╣рд╛рдБ, рдпреВрдирд░реА + рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛:

 +1n; // TypeError: Cannot convert a BigInt value to a number Number(1n); // 1 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ BigInt рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рдмрдбрд╝реЗ рдкреВрд░реНрдгрд╛рдВрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ 2 ^ 53-1 ( MAX_SAFE_INTEGER ) рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдореБрдЦреНрдп рдирд┐рд░реНрдгрдп


рд╣рд╛рдВ, рдпрд╣ рдЗрд╕ рдирд╡рд╛рдЪрд╛рд░ рдХрд╛ рдореБрдЦреНрдп рдирд┐рд░реНрдгрдп рдерд╛ред рдпрджрд┐ рдЖрдк рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд╣реИ: рдпреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд░реВрдкрд╛рдВрддрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЬрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ (рдмрдбрд╝реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛) рдХреЗ рджреЛ рдорд╛рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЧрдгрд┐рддреАрдп рдорд╛рди рдЙрдирдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди (2n ** 53n + 1n) + 0.5 рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд╣реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдм рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝реНрд▓реЛрдЯ 64 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рд╕рдЯреАрдХрддрд╛ рдЕрдм рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ:

 2n ** 53n + 1n; // 9007199254740993n Number(2n ** 53n + 1n) + 0.5; // 9007199254740992 

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬрд╣рд╛рдВ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдлреНрд▓реЛрдЯ рджреЛрдиреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреВрд░реНрд╡ рдХреЛ 1 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдХреЛ 1.0 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдСрдкрд░реЗрдВрдб рдореЗрдВ рдПрдХ рджрд╢рдорд▓рд╡ рд╡рд┐рднрд╛рдЬрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧрдгрдирд╛ рдореЗрдВ рдлреНрд▓реЛрдЯ рдХреА рд╕рдЯреАрдХрддрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ 1 рдПрдХ рдлреНрд▓реЛрдЯ рд╣реИ! рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ 2 рдПрди ** 53 рдПрди + 1 рдлреНрд▓реЛрдЯ 2 ^ 53 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдЬреЛ, рдмрджрд▓реЗ рдореЗрдВ, BigInt рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ:

 2 ** 53 === 2 ** 53 + 1; // true 

рдЦреИрд░, "рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЯреЙрд╡рд░" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рдЙрд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП) рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред

рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрд╢рди рдореЗрдВ рдирдВрдмрд░ рдФрд░ рдмрд┐рдЧрдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдирд┐рд╣рд┐рдд рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рдмрдбрд╝рд╛ рдкреВрд░реНрдгрд╛рдВрдХ" рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рд╡реЗрдм рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:

 Math.max(1n, 10n); // TypeError 

рдЖрдкрдХреЛ рдирдВрдмрд░ () рдпрд╛ BigInt () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ , рдЬреЛ рднрд╛рд╖рд╛ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрдо рд╣реИред

рдмреЗрд╢рдХ, рдпрд╣ рдЕрдиреНрдп рдЖрджрд┐рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ:

 1 + true; // 2 1n + true; // TypeError 1 + null; // 1 1n + null; // TypeError 

рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА) рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ:

 1n + [0]; // '10' 1n + {}; // '1[object Object]' 1n + (_ => 1); // '1_ => 1' 

рдПрдХ рдФрд░ рдЕрдкрд╡рд╛рдж рд╕рдВрдЦреНрдпрд╛ рдФрд░ BigInt рдХреЗ рдмреАрдЪ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ (рдЬреИрд╕реЗ < , > рдФрд░ == ) рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╕рдЯреАрдХрддрд╛ рдХрд╛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рднреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмреВрд▓рд┐рдпрди рд╣реИред

рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдирдП рдкреНрд░рддреАрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ TypeError рдЕрдм рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдЯреНрдЯрд░рдкрдВрдереА рдЬреЛрдбрд╝ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ?

 Symbol() + 1; // TypeError: Cannot convert a Symbol value to a number 

рдФрд░ рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдирд╣реАрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддреАрдХ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдВрдкреВрд░реНрдг - рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ:

  1. рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд╣реБрдд рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рд╣реИред
  2. рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ "рдмрдбрд╝рд╛ рдкреВрд░рд╛" рдСрдкрд░реЗрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред

рдЕрд╕рдореА + рдСрдкрд░реЗрдЯрд░ asm.js рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ , рдЬрд╣рд╛рдВ рд╕рдВрдЦреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдпреВрдиреАрд░реА рдкреНрд▓рд╕ рдмрд┐рдЧрдЖрдИрдВрдЯ рдХреЗ рд╕рд╛рде рдирдВрдмрд░ рдХреА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ asm.js рдХреЛрдб рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡


BigInt рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╛рджрдЧреА рдФрд░ "рд╕рдлрд╛рдИ" рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдПрдХреНрд╕рд▓ рд░реМрд╢рдореЗрдпрд░ рдирд╡рд╛рдЪрд╛рд░ рдХреА рдХрдореА рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдореМрдЬреВрджрд╛ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрдЧрд╛рдореА рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛:
53-рдмрд┐рдЯ рдЗрдирдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЗрдВрдЯреЗрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ ред

рдЖрдЗрдП рдирдВрдмрд░ рдХреЛ рдирдП Int рдФрд░ Double рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ:

  • рдЯрд╛рдЗрдкреЛрдл 123.0 === 'рд╕рдВрдЦреНрдпрд╛' , рдФрд░ рдирдВрдмрд░.рдбрд┐рд╕реН рдбрдмрд▓ (123.0) === рд╕рдЪ
  • рдЯрд╛рдЗрдкреЛрдлрд╝ 123 === 'рд╕рдВрдЦреНрдпрд╛' , рдФрд░ рдирдВрдмрд░.рдЖрдИрд╕рдЗрдВрдЯ (123) === рд╕рдЪ

Number.asInt () рдФрд░ Number.asDouble () рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде:

  • рдЗрдВрдЯ ├Ч рдбрдмрд▓ = рдбрдмрд▓ (рдХрд╛рд╕реНрдЯ)
  • рдбрдмрд▓ ├Ч рдЗрдВрдЯ = рдбрдмрд▓ (рдХрд╛рд╕реНрдЯ рдХреЗ рд╕рд╛рде)
  • рдбрдмрд▓ ├Ч рдбрдмрд▓ = рдбрдмрд▓
  • Int ├Ч Int = Int (рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдСрдкрд░реЗрдЯрд░)

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рд╡рд╛рдХреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ (рдкрд╣рд▓реЗ) рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд 64-рдмрд┐рдЯ рдбрдмрд▓-рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ (IEEE 754-2008) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдм рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдирддреАрдЬрддрди, "рдЧрд▓рдд рд╕рдВрдЦреНрдпрд╛" 123.0 рдФрд░ "рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛" 123 рдПрдХрд▓ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реИрдВред

рдпрд╣ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рдЧрдВрднреАрд░ рдЕрдкрдЧреНрд░реЗрдб рд╣реИ, рдЬреЛ "рд╡реЗрдм рдХреЛ рддреЛрдбрд╝рдиреЗ" рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:

  • 1 рдФрд░ 1.0 рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдерд╛ред рдореМрдЬреВрджрд╛ рдХреЛрдб рдЙрдиреНрд╣реЗрдВ рдкрд░рд╕реНрдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдВрддрд░ рд╢реБрд░реВ рдореЗрдВ рдореМрдЬреВрдж рдерд╛)ред
  • рдПрдХ рдкреНрд░рднрд╛рд╡ рд╣реИ рдЬрдм 1 === 1.0 (рдпрд╣ рдПрдХ рдЕрдкрдЧреНрд░реЗрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рдЙрд╕реА рд╕рдордп, Number.isDouble (1)! == Number.isDouble (1.0) : рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдРрд╕рд╛ рд╣реИред
  • рд╕рдорд╛рдирддрд╛ 2 "53" рдФрд░ 2 ^ 53 + 1 рдХреА "рдЦрд╝рд╛рд╕рд┐рдпрдд" рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
  • Asm.js рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдП рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдордЭреМрддрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА ред

рдЬрдм рдЖрдк рджреЛ рдХреБрд░реНрд╕рд┐рдпреЛрдВ рдкрд░ рдмреИрдарддреЗ рд╣реИрдВ


рджрд░рдЕрд╕рд▓, рд╕рдорд┐рддрд┐ рдХреА рдЯрд┐рдкреНрдкрдгреА рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ

рдПрдХ рдУрд░, рдореИрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ "рд╕рдЯреАрдХ" рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рджреВрд╕рд░реА рдУрд░, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ "рд╕рдЯреАрдХ" рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рдЧрдгрд┐рдд, рднрд╛рд╖рд╛ рдХрд╛ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕, asm.js, рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдЧреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ , рдЙрддреНрдкрд╛рджрдХрддрд╛ рдФрд░, рдЕрдВрдд рдореЗрдВ, рд╡реЗрдм рд╣реА! рдФрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ, рдЬреЛ рдПрдХ рд╣реА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдЖрдк рдЙрди рднрд╛рд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдЧрд░реНрдо рдмрд╣рд╕ рдореЗрдВ рдереЗ ред рд╕рдЪ рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛?

Source: https://habr.com/ru/post/hi439402/


All Articles