Underscore: __.isNumber(NaN)๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2011๋…„ 12์›” 15์ผ  ยท  38์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/underscore

NaN์€ "Not Number"๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ isNumber ๊ฒ€์‚ฌ๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ํ† ๋ก ์—์„œ ์ด๊ฒƒ์ด ์‚ฌ์‹ค์€ ์˜๋„์ ์ธ ๊ฒƒ์ž„์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋Š” ์ด ์‚ฌ์‹ค์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

enhancement fixed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์•„, ๋‚˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค. ๋ฌธ์ž์—ด, ์ˆซ์ž ๋ฐ ๊ฐ€๋Šฅํ•˜๋ฉด NaN์ธ ์ž…๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. parseInt ๋ฐ isFinite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ parse int๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋ณธ JavaScript์— ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜์ง€๋งŒ ์™„์ „ํžˆ ๊นจ๋—ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‚ด ๋ชฉํ‘œ๋ฅผ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ ๋ฉ‹์ง„ goto ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ฒ€์‚ฌ์—์„œ ๊ฐ’์„ ์ทจํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์ˆซ์ž์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ •์˜์— ๋”ฐ๋ผ ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฒซ์งธ, ์ด๊ฒƒ์œผ๋กœ ๋ฌธ์„œ์— ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ž‘์—…์— ์ ํ•ฉํ•œ ๊ธฐ๋Šฅ์„ ์–ป๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‘˜์งธ, ์ด๊ฒƒ์ด ์˜๋ฏธ ์žˆ๋Š” ์˜ˆ๋ฅผ ๋‹ค์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค.

์–ธ์–ด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 8ํ•™๋…„ ๋™์ƒ์ด ๋‚˜์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ์–ด๋‘์šด ์†”๋ฃจ์…˜์—์„œ ๋งน๋ชฉ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฉ‹์ง„ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์„ ๊ต์œกํ•˜๋Š” ๋ฐ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  38 ๋Œ“๊ธ€

๋‹น์‹  ๋ง์ด ๋งž์•„, ๊ทธ๊ฒƒ์€ ์˜๋„์ ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. IEEE 754 ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ์ž‘์—…ํ•œ ์ ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์€ NaN ๊ฐ€ ๋˜ ๋‹ค๋ฅธ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ด€๋ จ: #321์˜ ํ† ๋ก 

์งˆ๋ฌธ์˜ ์š”์ ์€ ์ผ๋ฐ˜์ ์ธ ์›น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ isNumber๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๊ฐ’์ด "์ด๊ฒƒ์ด ์ˆซ์ž์ž…๋‹ˆ๊นŒ?"๋ผ๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ์ •์˜์— ์‘๋‹ตํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ณ„์‚ฐ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฐ’์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก NaN ๊ฐ’์ด ์ฒ˜์Œ ๋„์ž…๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ŠคํŽ™์ƒ "์ด๊ฒŒ ์ˆซ์ž์•ผ?" ๋ผ๊ณ  ๋ฌผ์œผ๋ฉด ์ •๋‹ต์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์‚ฌ์‹ค "์ˆซ์ž๊ฐ€ ์•„๋‹˜"์ž…๋‹ˆ๋‹ค. ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์ด ์‚ฌ์‹ค์ด๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋ฅผ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ง€๊ธˆ ์ž… ๋‹ค๋ฌผ๊ฒ ์Šต๋‹ˆ๋‹ค. :)

JS๋ฅผ ์•„๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•  isFinite ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค. ๋ฌธ์ž์—ด, ์ˆซ์ž ๋ฐ ๊ฐ€๋Šฅํ•˜๋ฉด NaN์ธ ์ž…๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. parseInt ๋ฐ isFinite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ parse int๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋ณธ JavaScript์— ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜์ง€๋งŒ ์™„์ „ํžˆ ๊นจ๋—ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‚ด ๋ชฉํ‘œ๋ฅผ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ ๋ฉ‹์ง„ goto ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ฒ€์‚ฌ์—์„œ ๊ฐ’์„ ์ทจํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์ˆซ์ž์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ •์˜์— ๋”ฐ๋ผ ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฒซ์งธ, ์ด๊ฒƒ์œผ๋กœ ๋ฌธ์„œ์— ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ž‘์—…์— ์ ํ•ฉํ•œ ๊ธฐ๋Šฅ์„ ์–ป๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‘˜์งธ, ์ด๊ฒƒ์ด ์˜๋ฏธ ์žˆ๋Š” ์˜ˆ๋ฅผ ๋‹ค์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค.

์–ธ์–ด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 8ํ•™๋…„ ๋™์ƒ์ด ๋‚˜์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ์–ด๋‘์šด ์†”๋ฃจ์…˜์—์„œ ๋งน๋ชฉ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฉ‹์ง„ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์„ ๊ต์œกํ•˜๋Š” ๋ฐ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@jashkenas์˜ ์ƒ๊ฐ์ด

์ฒซ์งธ, ์ด๊ฒƒ์œผ๋กœ ๋ฌธ์„œ์— ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ž‘์—…์— ์ ํ•ฉํ•œ ๊ธฐ๋Šฅ์„ ์–ป๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋งˆ๋„, ํ™•์‹คํžˆ.

๋‘˜์งธ, ์ด๊ฒƒ์ด ์˜๋ฏธ ์žˆ๋Š” ์˜ˆ๋ฅผ ๋‹ค์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค.

[[ํด๋ž˜์Šค]] == "์ˆซ์ž"์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ? ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๋“ค์€ ์ž์—ฐ์ˆ˜๋‚˜ ์ •์ˆ˜, ์œ ํ•œ์ˆ˜, ์‹ค์ˆ˜, ์œ ๋ฆฌ์ˆ˜ ๋˜๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ธฐ๋Œ€ํ–ˆ๋˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ๋“ค์€ ๋ถ„๋ช…ํžˆ ๋ชจ๋‘ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ ๋ฌธ์„œ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ณดํ’€์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์ด ๊ทธ๋Ÿฐ ์‹œ๊ธฐ ์ค‘ ํ•˜๋‚˜๋Š” ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ ์ƒํƒœ์—์„œ ์ˆซ์ž์˜ ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ƒ์ถฉ๋˜๋Š” ํ•ด์„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ž ์žฌ์ ์œผ๋กœ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์„ธํŠธ์˜ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ์ด๋ฏธ ์„ค์ •ํ•œ ๋‹ค์Œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด _๋‚˜ํƒ€๋‚œ_ ํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. +1 , ์—ฌ์ „ํžˆ @jashkenas๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ -- NaN ์ „๋‹ฌ๋  ๋•Œ _.isNumber ๊ฐ€ true ๋˜๋Š” false ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์ „ํ˜€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ  ํ™•์‹คํžˆ ๊ธฐ์–ตํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„ ์ปค๋ฐ‹์˜ ๋ฌธ์„œ์— ๋ฉ”๋ชจ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

๊ณ ๋งˆ์›Œ ์–˜๋“ค์•„. ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜๋ฏธ๋ก ์ด ๊ธฐ์ˆ ์  ์‚ฌ์‹ค๋ณด๋‹ค ์šฐ์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ, NaN์€ ์ผ๋ถ€ ์‚ฌ์–‘์— ๋”ฐ๋ผ ์ˆซ์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ "๋‹น์‹ ์€ ๋ฒˆํ˜ธ์ž…๋‹ˆ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์„ํ•˜๋ฉด "๋‚˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค"๋ผ๊ณ  ํ•˜๋ฉด ๋ฏฟ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Not Number โ€“ NaN โ€“ ์€ ํ™•์‹คํžˆ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉฐ isNumber๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹  Gotcha๋ฅผ ๋ฌธ์„œ์— ๋„ฃ์œผ๋ฉด ์ฝ”๋”ฉ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค๊ณ  ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์žฌ๊ณ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@contentfree : NaN ๋Š” float์˜ ๋ฉค๋ฒ„์ž…๋‹ˆ๋‹ค. JS์˜ ๋ชจ๋“  ์ˆซ์ž๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด NaN ๋ฅผ ๊ทธ๋“ค์ด ์–ป๋Š” ๋งŒํผ ์ˆซ์ž๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. NaN ๋Š” "๋‚˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค"๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ฑ…์—์„œ ์ผ€์ด์Šค๊ฐ€ ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค. NaN / Infinity / -Infinity ๊ฐ€ ์•„๋‹Œ ์ˆซ์ž๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด isFinite ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ฃฝ์€ ๋ง์„ ์ด๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ...

์™œ ๊ทธ๋ƒฅํ•˜์ง€
obj instanceOf Number

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์–‘์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋” ์ฝ๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ง€์ง€ ์•Š์€(์กฐ์‚ฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š” ํ•œ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์˜๋ฏธ์ƒ ์˜ฌ๋ฐ”๋ฅด๋„๋ก ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

instanceof ์—ฐ์‚ฐ์ž๋Š” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค: new Number(5) instanceof Number == true; 5 instanceof Number == false . ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €์˜ ํ”„๋ ˆ์ž„ ๊ฐ„์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [[Class]] ๋ฅผ ํ†ตํ•ด ํ™•์ธ Object::toString ์ž…๋‹ˆ๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ • ๋œ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ์œ ํ˜•์˜ ํ™•์ธ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ฐ™์€ ๊ฒฝ์šฐ์— JavaScript๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ต์œกํ•˜๋Š” ๋ฐ +1์ž…๋‹ˆ๋‹ค.

์ œ์•ˆ:
_.isNumber(๊ฐ์ฒด, [isFinite]);

์ด๊ฒƒ์€ isFinite๊ฐ€ ์•„๋งˆ๋„ ๋‹น์‹ ์ด ์ฒ˜์Œ์— ์ถ”๊ตฌํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ์Œ์„ ๋ฐฐ์šฐ๋Š” ๋™์•ˆ ์ด ๋ฌธ์ œ์— ๊ฑธ๋ ธ์„ ๋•Œ ํ˜„์žฌ ๊ตฌํ˜„์— true๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋‚ด 2c

@nickl- ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์ง€๋งŒ...์ด ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ isFinite ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋˜๋Š” _.isNaN ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ๋Œ€์นญ์„ ์œ„ํ•ด _.isFinite ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

_.isFinite = function (value) {
  return value > -1 / 0 && value < 1 / 0;
};

@kitcambridge

๋‚ด๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด์ด ์œ ํ•œํ•œ "0x0", "0xF", "2" ๋“ฑ์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌด์—‡์ด๋“  _.isNumber ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

_.isFinite = function (obj) {
  return obj > -1/0 && obj < 1/0 && _.isNumber(obj);
};

์ˆซ์ž ํ…Œ์ŠคํŠธ์— val === +val์„ ์‚ฌ์šฉํ•˜์—ฌ 5๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

_.isFinite = function (obj) {
  return obj > -1/0 && obj < 1/0 && obj === +obj;
};

@octatone ๋ฌผ๋ก , ์ œ ์ƒ๊ฐ์—๋Š” ๊ทธ๊ฒŒ ๊ณตํ‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...๊ธฐ์ˆ ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด์€ ์ˆซ์ž ๋น„๊ต์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— _are_ ์œ ํ•œํ•˜์ง€๋งŒ(์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ˆซ์ž๋กœ ๊ฐ•์ œํ•ด์•ผ ํ•จ) ์ œ์•ˆํ•œ ์ œ์•ˆ์ด ๊ธฐ์กด Underscore ์œ ํ˜• ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ๊ณผ ๋” ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด _.isValidDate์™€ ์ธ๋ผ์ธ์ด๊ณ  isFinite ์ธ์ˆ˜๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋Š” _,isValidNumber๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@nickl-

NaN ๋ฐ Infinity _are_ ์œ ํšจํ•œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ isValidNumber๋กœ ์ง€์ •ํ•˜๋ฉด ๊ทธ ๋ชฉ์ ์ด ํ˜ผ๋™๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด isNumber๋ฅผ isValidNumber๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ผ๋Š” ๋œป์ž…๋‹ˆ๊นŒ?

NaN ๋ฐ Infinity _are_ ์œ ํšจํ•œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ isValidNumber๋กœ ์ง€์ •ํ•˜๋ฉด ๊ทธ ๋ชฉ์ ์ด ํ˜ผ๋™๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค.

์ด๋ฆ„๋ฐ”๊พธ๋ผ๋Š” ๋ง์€ ์•ˆํ–ˆ๋Š”๋ฐ...

์ €๋„ _.isNumber(NaN) === true ์•Œ๊ณ  ๋†€๋ž์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” @contentfree์˜ https://github.com/jashkenas/underscore/issues/406#issuecomment -4144992์— ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ์šฐ๋ฆฌ๋Š” ์ด ํŠน์ •ํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: ์ตœ์†Œ ๋†€๋ผ์›€์˜ ์›์น™ . ;-)

๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ํ›„, ํ•˜๋“œ ์ฝ”์–ด js ์ฝ”๋”๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฆ„์„ ๋ณผ ๋•Œ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ž‘์€ 2ยข...โ„ข

_.isNaN ๋„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ:

์ฐธ๊ณ : ์ด๊ฒƒ์€ ๊ธฐ๋ณธ isNaN ํ•จ์ˆ˜์™€ ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉฐ, undefined์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋งŽ์€ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋„ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ •์ƒ์ ์ธ ์˜๋ฏธ์—์„œ undefined ๋Š” ์‹ค์ œ๋กœ Not-A-Number์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜๋ฏธ๋ก ์  ๊ตฌ์„ฑ์„ฑ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. isNumber == Not a number lol. ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’ ํ™•์ธ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์˜๋ฏธ๋ก ์  ๊ฑด์„ค์„ฑ์— ํˆฌํ‘œํ•œ๋‹ค.

์•„๋‹ˆ, -Infinity , Infinity , & Object(2) ์ฒ˜๋Ÿผ [[Class]] ์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋„ ๊ฐ์ฒด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐฐ์šฐ๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋ฒˆํ˜ธ์— ๋Œ€ํ•ด ์–ด๋–ค ํ˜•์‹์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด -1 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ Math.pow(2,32) ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. -Infinity , Infinity ๋˜๋Š” NaN ๊ฒฝ์šฐ _.isFinite ๋ฅผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ _.isDate ๋Š” ๋‚ ์งœ ๊ฐœ์ฒด๊ฐ€ ์œ ํšจํ•œ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"see also: isFinite" ๋ฐ "see also: ยซ์–ด๋–ค ๊ฒƒ์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž ๊ฐ’์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ด๊ฑฐํ•˜๋Š” ์—์„ธ์ดยป"๋กœ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@michaelficarra ์‚ฌ์–‘์—์„œ NaN์ด ์ˆซ์ž ์œ ํ˜•

์šฐ๋ฆฌ ๋Œ€๋ถ€๋ถ„์ด ์•Œ๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์„ ๊ธฐ๋ณธ ์‚ฐ์ˆ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š๋ƒ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ isNumber(x) && isFinite(x)๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํฐ ๋ฌธ์ œ์ด๊ณ  ์ž˜ ์ฝํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—„๊ฒฉํ•œ ์˜์–ด ๊ด€์ ์—์„œ isNumber๋ผ๋Š” ํ…Œ์ŠคํŠธ์—์„œ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Not a Number(NaN)๋Š” ์ „ํ˜€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. isNumeric ๋˜๋Š” isNumericType์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋” ๋‚ซ์ง€ ์•Š์„๊นŒ์š”?

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ์˜์‹ฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ isNumber(x) && isFinite(x)๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ES6 Number.isFinite ๋ฅผ ๋”ฐ๋ฅด๋„๋ก _.isFinite ๊ตฌํ˜„์„ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ’์ด ์ˆซ์ž ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์ด๊ณ  ์œ ํ•œํ•˜๋ฉฐ ์ด ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ [[Class]] ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•๊ณผ ์ผ์น˜ํ•˜๋Š” _.isNumber ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์—„๊ฒฉํ•œ ์˜์–ด ๊ด€์ ์—์„œ isNumber๋ผ๋Š” ํ…Œ์ŠคํŠธ์—์„œ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Not a Number(NaN)๋Š” ์ „ํ˜€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. isNumeric ๋˜๋Š” isNumericType์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋” ๋‚ซ์ง€ ์•Š์„๊นŒ์š”?

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, _.isNumber ๋ฐ _.isDate ์— ๋Œ€ํ•œ ๋‚ด ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@jdalton _.isDate๋กœ ๋™์ž‘์ด ์ผ์ •ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์€ ๋ฐ‘์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›Œ๋ฅญํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๊ฒฐ์ •์€ ์ „์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด ์ˆซ์ž๋ผ๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Walms 100% ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์™€ ์ง๊ด€์ด NaN์ด _๊ธฐ์ˆ ์ ์œผ๋กœ_ ์ˆซ์ž์ธ ์ง„์ˆ ์˜ ์ ˆ๋Œ€์ ์ธ "์ •ํ™•์„ฑ"์„ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด ์ˆซ์ž๋ผ๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ ์ƒํ™ฉ์—์„œ, ๊ทธ๊ฒƒ์€๋ณด๋‹ค ๋” ์นด์šดํ„ฐ ์ง๊ด€ _.isNumber ๋ณต๊ท€ true , ์ˆ˜ ๊ฐœ์ฒด Object(2) ํƒ€์ž…์˜ ๊ฒƒ์„ object ?

[[Class]] ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋ฏธ _.isFinite ๊ฐ€ ES6 Number.isFinite ๋”ฐ๋ฅด๋„๋ก ํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ is-number ๋ฅผ ์›ํ•˜๋ฉด typeof x == 'number' . ๊ฐ’์ด NaN , Infinity ๋˜๋Š” -Infinity , ๋ชจ๋“  [[Class]] of Number ๊ฐ€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด _.isFinite ๋Š” ๊ฐˆ ๊ธธ์ž…๋‹ˆ๋‹ค.

๋” ์„ธ๋ถ„ํ™”๋œ ์ˆซ์ž ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” underscore-contrib ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. _.isNumeric , _.isInteger , _.isZero , _.isEven , _.isOdd , _.isFloat , _.isNegative , & _.isPositive .

@jdalton ๋งˆ์ง€๋ง‰ ๋‘ ๋Œ“๊ธ€์ด ์™œ ์ด๊ฒƒ์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฒ˜์Œ์— _.isNumber๊ฐ€ ์œ ํ˜• ๊ฒ€์‚ฌ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” is๊ฐ€ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ์ปจํ…์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด _.isNumber๊ฐ€ NaN์— ๋Œ€ํ•ด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ underscore-contrib ๋ฐ isFinite๋Š” ์ด ์ปจํ…์ŠคํŠธ๋ฅผ ๊นจ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” is๋กœ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์œ ํ˜•๋ณด๋‹ค๋Š” ๊ฐ€์น˜๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„์—์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…ํ™•ํ•œ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๊ณ ์น  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” Numbers์— ๋Œ€ํ•ด ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ–‰๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ _.isNumber ๋œ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋” ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋œ ์ง๊ด€์ ์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

# If you add two Numbers together you always get another Number back
# This function should always return true no matter what you pass it
closedUnderAddition = (a, b) -> !isNumber(a) || !isNumber(b) || isNumber(a + b)

closedUnderAddition(1,1) == true
closedUnderAddition(Number.MAX_INT,2**970) == true # false if isNumber checks finiteness

# If you divide two Numbers you always get another Number back
closedUnderDivision = (a, b) -> !isNumber(a) || !isNumber(b) || isNumber(a / b)

closedUnderDivision(1, 2) == true
closedUnderDivision(1, 0) == true # false if isNumber checks finiteness
closedUnderDivision(0, 0) == true # false if isNumber checks finiteness or NaN-ness

# Anything you cast to a Number is a Number
castsToNumber = (x) -> isNumber(Number(x))

castsToNumber(1) == true
castsToNumber(Infinity) == true # false if isNumber checks finiteness
castsToNumber("bees") == true # false if isNumber checks finiteness or NaN-ness
castsToNumber("3") == true

๋งˆ์ดํดํ”ผ์นด๋ผ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด:

NaN์€ "๋‚˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค"๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜๋Š” ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด "์ˆซ์ž"์™€ ์ˆซ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. NaN์€ "์ˆซ์ž"๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ Infinity, -Infinity ๋ฐ -0๊ณผ ๊ฐ™์€ ์šฐ์Šค๊ฝ์Šค๋Ÿฌ์šด ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์ ˆ๋Œ€์ ์œผ๋กœ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ์น ๊ณ  ํ„ธํ„ธํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Number์˜ ์ •์˜๋Š” ์ž˜ ์ง€์ •๋˜๊ณ  ์ผ๊ด€๋˜๊ฒŒ ํ–‰๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— "์ˆซ์ž"๋Š” ๋Œ€ํ™” ์ƒ๋Œ€ ์— ๋”ฐ๋ผ ์œ„์˜ ํ•ญ๋ชฉ ์ค‘ ์ผ๋ถ€๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ˆซ์ž ๋ฌธ์ž์—ด, bool, ์ž์ • ๋ฐ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜๋ชป ์ •์˜๋œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋Š” ์†”๋ฃจ์…˜์€ ์ ˆ๋Œ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ ์ด๊ฒƒ์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌธ์„œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ "์ˆซ์ž"๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋‹จ์–ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ข‹์€ ์ง€์ , @sgentle. ๋‚˜๋Š” ์ง๊ด€์ ์ธ ๊ฒƒ๋ณด๋‹ค ์ผ๊ด€์„ฑ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ „์ž๋Š” ๊ฐ๊ด€์ ์ธ ์ฒ™๋„์ด์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ง๊ด€์ ์ธ ๊ฒƒ์— ๋™์˜ํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณด์—ฌ์ฃผ๋“ฏ์ด).

NaN์„ "Not Number"๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. NaN์€ ํŠน๋ณ„ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

NaN์„ "Not Number"๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. NaN์€ ํŠน๋ณ„ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋„ค, ํ•˜์ง€๋งŒ "Not Number"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜์—๊ฒŒ๋Š” ์ด๋Ÿฐ
var _false = "์ฐธ";
์˜ˆ, _false๊ฐ€ ์‚ฌ์‹ค์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ •๋‹นํ•œ ์ด์œ  ์—†์ด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@Walms ๊ทธ๊ฒƒ์€ ๋‚˜์œ ์ด๋ฆ„์ด์ง€๋งŒ JS์˜ ์ž˜๋ชป์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ "NaN"์œผ๋กœ ๋ช…๋ช…ํ•œ ์‚ฌ๋žŒ์„ ๋น„๋‚œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://en.wikipedia.org/wiki/NaN

์•„์•„, ๋‚˜๋Š” _.isNumber(NaN) ๊ฐ€ false ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค ... ์ด๊ฒƒ์ด ์ด์œ ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์„ ๋•Œ๊นŒ์ง€ ์‹ฌ๊ฐํ•œ ๋จธ๋ฆฌ ๊ธํž˜.

if (isNaN(Number(value))) {
  alert('Number required.');
}

@pspi ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. _.isNumber() ๊ฐ€ _์˜๋ฏธ์ _ ์˜๋ฏธ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ._isFinite() ๋Š” ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  ์ด๊ฒƒ์„ ๊ฒŒ์‹œํ•œ ํ›„ ์–ด๋Š ๋‚  ์ธ์ˆ˜๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ _.isFinite('1') ๊ฐ€ true ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰