JavaScript ਦਾ Math object ਭਾਸ਼ਾ ਦਾ ਇੱਕ ਸ਼ਾਂਤ utility belt ਹੈ। ਤੁਸੀਂ ਇਸਨੂੰ ਕਦੇ instantiate ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ ਇਸਨੂੰ ਕਦੇ import ਨਹੀਂ ਕਰਦੇ। ਇਹ ਹਰ runtime ਵਿੱਚ ਮੌਜੂਦ ਹੁੰਦਾ ਹੈ, ਜੋ pixel value ਨੂੰ round ਕਰਨ ਤੋਂ ਲੈ ਕੇ random dice roll ਬਣਾਉਣ ਤੱਕ ਸਭ ਕੁਝ ਸੰਭਾਲਣ ਲਈ ਤਿਆਰ ਹੈ। ਕਿਉਂਕਿ Math ਇੱਕ static object ਹੈ, ਹਰ method ਅਤੇ property ਸਿੱਧੇ ਤੌਰ 'ਤੇ namespace ਤੋਂ ਜੁੜੀ ਹੁੰਦੀ ਹੈ। ਤੁਸੀਂ Math.PI ਲਿਖਦੇ ਹੋ, new Math().PI ਨਹੀਂ। ਇਹ design choice ਚੀਜ਼ਾਂ ਨੂੰ ਸਰਲ ਰੱਖਦੀ ਹੈ, ਪਰ ਇਸਦਾ ਮਤਲਬ ਇਹ ਵੀ ਹੈ ਕਿ object ਵਿੱਚ ਕੁਝ ਅਜਿਹੀਆਂ ਚੀਜ਼ਾਂ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ production logic ਲਈ ਵਰਤਣ ਤੋਂ ਪਹਿਲਾਂ ਸਮਝਣਾ ਜ਼ਰੂਰੀ ਹੈ।
ਬਿਨਾਂ Constructor ਵਾਲਾ ਇੱਕ Static Object
ਜ਼ਿਆਦਾਤਰ built-in JavaScript objects ਚਾਹੁੰਦੇ ਹਨ ਕਿ ਤੁਸੀਂ ਇੱਕ instance ਬਣਾਓ। ਤੁਸੀਂ new Date() ਜਾਂ new Array() ਕਾਲ ਕਰਦੇ ਹੋ। Math ਇਸ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ primitive Number type 'ਤੇ ਕੰਮ ਕਰਨ ਵਾਲੇ ਸਬੰਧਤ functions ਅਤੇ constants ਦੇ ਇੱਕ namespace ਵਜੋਂ design ਕੀਤਾ ਗਿਆ ਹੈ। Math.sqrt(16) ਕਾਲ ਕਰੋ ਅਤੇ ਤੁਹਾਨੂੰ 4 ਮਿਲੇਗਾ। new keyword ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਅਤੇ engine ਇੱਕ TypeError ਸੁੱਟ ਦੇਵੇਗਾ। ਇਹ pattern memory ਨੂੰ ਸਾਫ਼ ਰੱਖਦਾ ਹੈ ਅਤੇ ਸੰਕੇਤ ਦਿੰਦਾ ਹੈ ਕਿ Math ਪੂਰੀ ਤਰ੍ਹਾਂ functional ਹੈ। ਇਹ inputs ਲੈਂਦਾ ਹੈ, outputs ਵਾਪਸ ਕਰਦਾ ਹੈ, ਅਤੇ ਕੁਝ ਵੀ ਬਦਲਦਾ (mutate) ਨਹੀਂ ਹੈ।
ਯਾਦ ਰੱਖਣ ਲਈ ਇੱਕ ਸਖ਼ਤ ਸੀਮਾ ਹੈ: Math standard IEEE 754 numbers ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ BigInt ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦਾ। ਜੇਕਰ ਤੁਸੀਂ Math.round() ਜਾਂ Math.abs() ਨੂੰ BigInt pass ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ TypeError ਮਿਲੇਗਾ। ਜੇਕਰ ਤੁਹਾਡੀ application 64-bit integers ਜਾਂ ਇਸ ਤੋਂ ਵੱਡੇ ਨਾਲ ਸਬੰਧਤ ਹੈ, ਤਾਂ ਤੁਹਾਨੂੰ ਇਸਨੂੰ convert ਕਰਨਾ ਪਵੇਗਾ ਜਾਂ ਇਸਦੀ ਬਜਾਏ native BigInt operators ਨਾਲ arithmetic ਨੂੰ ਸੰਭਾਲਣਾ ਪਵੇਗਾ।
Constants ਜੋ ਤੁਸੀਂ ਅਸਲ ਵਿੱਚ ਵਰਤਦੇ ਹੋ
Math object ਕਈ numeric constants ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ ਤੁਹਾਨੂੰ magic numbers ਨੂੰ hard-code ਕਰਨ ਤੋਂ ਬਚਾਉਂਦੇ ਹਨ।
Math.PIਜਾਣਿਆ-ਪਛਾਣਿਆ 3.14159... ਹੈ, ਜੋ circles, trigonometry, ਜਾਂ degrees ਨੂੰ radians ਵਿੱਚ ਬਦਲਣ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਲਈ ਜ਼ਰੂਰੀ ਹੈ।Math.EEuler's number ਹੈ, ਲਗਭਗ 2.718। ਇਹ exponential growth curves, compound interest calculations, ਅਤੇ logarithmic scales ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ।Math.SQRT2ਦੋ ਦਾ square root ਹੈ, ਲਗਭਗ 1.414। ਇਹ ਉਦੋਂ ਕੰਮ ਆਉਂਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਨੂੰ ਕਿਸੇ square ਦਾ diagonal ਚਾਹੀਦਾ ਹੋਵੇ ਜਾਂ ਸਧਾਰਨ geometry ਵਿੱਚ vectors ਨੂੰ normalize ਕਰਨਾ ਹੋਵੇ।Math.LN22 ਦਾ natural logarithm ਹੈ, ਲਗਭਗ 0.693। ਤੁਸੀਂ ਇਸਨੂੰ ਉਹਨਾਂ algorithms ਵਿੱਚ ਦੇਖੋਗੇ ਜੋ binary trees, information entropy, ਜਾਂ log-base-2 math ਵਾਲੀ time complexity analysis ਨਾਲ ਸਬੰਧਤ ਹਨ।
ਇਹ values ਪੂਰੀ ਤਰ੍ਹਾਂ double-precision floats ਹਨ। ਕਿਉਂਕਿ ਇਹ properties ਹਨ ਨਾ ਕਿ methods, ਤੁਸੀਂ ਉਹਨਾਂ ਤੱਕ ਬਿਨਾਂ parentheses ਦੇ ਪਹੁੰਚਦੇ ਹੋ।
Rounding, Signs, ਅਤੇ Absolute Values
ਸਭ ਤੋਂ ਆਮ Math ਕੰਮਾਂ ਵਿੱਚ ਕਿਸੇ number ਨੂੰ ਸਾਫ਼ ਕਰਨਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। JavaScript ਤੁਹਾਨੂੰ ਚਾਰ rounding methods ਦਿੰਦਾ ਹੈ, ਅਤੇ ਉਹ ਇੱਕੋ ਜਿਹਾ ਵਿਵਹਾਰ ਨਹੀਂ ਕਰਦੇ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਤੁਸੀਂ positive territory ਤੋਂ ਬਾਹਰ ਜਾਂਦੇ ਹੋ।
Math.abs(x) ਕਿਸੇ number ਦੀ magnitude ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ -42 pass ਕਰੋ ਅਤੇ ਤੁਹਾਨੂੰ 42 ਮਿਲੇਗਾ। ਇਹ ਉਦੋਂ ਉਪਯੋਗੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਨੂੰ direction ਦੀ ਬਜਾਏ distance ਦੀ ਚਿੰਤਾ ਹੁੰਦੀ ਹੈ। Timestamps ਦੀ ਤੁਲਨਾ ਕਰਨ, UI ਵਿੱਚ drag deltas ਦੀ ਗਣਨਾ ਕਰਨ, ਜਾਂ ਇਹ ਚੈੱਕ ਕਰਨ ਬਾਰੇ ਸੋਚੋ ਕਿ ਕੀ ਕੋਈ guess error margin ਦੇ ਅੰਦਰ ਹੈ।
Math.round(x) ਸਕੂਲ ਵਾਲਾ rounder ਹੈ। ਇਹ ਸਭ ਤੋਂ ਨੇੜਲਾ integer ਲੈਂਦਾ ਹੈ, ਅਤੇ ਅੱਧੇ (halves) ਵਾਲੇ ਮੁੱਲਾਂ ਨੂੰ ਅਗਲੇ positive integer ਤੱਕ round ਕਰਦਾ ਹੈ। ਇਸ ਲਈ 4.4 ਬਣ ਜਾਂਦਾ ਹੈ 4, ਅਤੇ 4.5 ਬਣ ਜਾਂਦਾ ਹੈ 5।
Math.ceil(x) ਹਮੇਸ਼ਾ ਅਗਲੇ integer ਤੱਕ ਉੱਪਰ ਵੱਲ round ਕਰਦਾ ਹੈ। 4.1 ਬਣ ਜਾਂਦਾ ਹੈ 5, ਅਤੇ -4.9 ਬਣ ਜਾਂਦਾ ਹੈ -4। ਇਹ ਆਖਰੀ ਵਾਲਾ ਲੋਕਾਂ ਨੂੰ ਹੈਰਾਨ ਕਰਦਾ ਹੈ। ਕਿਉਂਕਿ number line 'ਤੇ -4, -4.9 ਤੋਂ ਵੱਡਾ ਹੈ, ਇਸ ਲਈ ceiling negatives ਲਈ zero ਵੱਲ ਜਾਂਦੀ ਹੈ।
Math.floor(x) ਇਸਦਾ ਉਲਟ ਹੈ। ਇਹ ਹਮੇਸ਼ਾ ਹੇਠਾਂ ਵੱਲ round ਕਰਦਾ ਹੈ। 4.9 ਬਣ ਜਾਂਦਾ ਹੈ 4, ਅਤੇ -4.1 ਬਣ ਜਾਂਦਾ ਹੈ -5। ਜੇਕਰ ਤੁਸੀਂ search results ਨੂੰ paginate ਕਰ ਰਹੇ ਹੋ ਜਾਂ fixed-size memory blocks ਨੂੰ allocate ਕਰ ਰਹੇ ਹੋ, ਤਾਂ floor ਆਮ ਤੌਰ 'ਤੇ ਉਹੀ ਹੁੰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ।
Math.trunc(x) decimal ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਹਟਾ ਦਿੰਦਾ ਹੈ, ਸਿਰਫ਼ integer portion ਹੀ ਰੱਖਦਾ ਹੈ। ਅਸਲ ਵਿੱਚ, ਇਹ sign ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ zero ਵੱਲ ਜਾਂਦਾ ਹੈ। 4.9 ਬਣ ਜਾਂਦਾ ਹੈ 4, ਅਤੇ -4.9 ਬਣ ਜਾਂਦਾ ਹੈ -4। ਜੇਕਰ ਤੁਸੀਂ ਉਹਨਾਂ languages ਤੋਂ logic port ਕਰ ਰਹੇ ਹੋ ਜੋ floats ਨੂੰ truncating ਰਾਹੀਂ ints ਵਿੱਚ cast ਕਰਦੀਆਂ ਹਨ, ਤਾਂ ਇਹ ਤੁਹਾਡਾ ਦੋਸਤ ਹੈ।
ਅੰਤ ਵਿੱਚ, Math.sign(x) ਤੁਹਾਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਕੋਈ value zero ਦੇ ਕਿਸ ਪਾਸੇ ਹੈ। ਇਹ positive ਲਈ 1, negative ਲਈ -1, positive zero ਲਈ 0, negative zero ਲਈ -0, ਅਤੇ ਕਿਸੇ ਵੀ ਅਜਿਹੀ ਚੀਜ਼ ਲਈ ਜੋ number ਨਹੀਂ ਹੈ, NaN ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇਹ if-else chain ਲਿਖੇ ਬਿਨਾਂ direction 'ਤੇ branch ਕਰਨ ਦਾ ਇੱਕ ਸੰਖੇਪ ਤਰੀਕਾ ਹੈ।
Random Numbers ਬਣਾਉਣਾ
Math.random() 0 (inclusive) ਤੋਂ 1 (exclusive) ਤੱਕ ਇੱਕ pseudo-random float ਪੈਦਾ ਕਰਦਾ ਹੈ। ਇਹ cryptographically secure ਨਹੀਂ ਹੈ, ਇਸ ਲਈ ਇਸਨੂੰ password generation, token creation, ਜਾਂ ਅਸਲ ਪੈਸੇ ਨਾਲ ਸਬੰਧਤ ਕਿਸੇ ਵੀ ਚੀਜ਼ ਲਈ ਵਰਤੋਂ ਨਾ ਕਰੋ।
