NaN์ "Not Number"๋ฅผ ์๋ฏธํ๋ฏ๋ก ์ด ๊ฒฝ์ฐ isNumber ๊ฒ์ฌ๋ false๋ฅผ ๋ฐํํด์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋๋ ๋ค๋ฅธ ํ ๋ก ์์ ์ด๊ฒ์ด ์ฌ์ค์ ์๋์ ์ธ ๊ฒ์์ ์์์ฐจ๋ ธ์ต๋๋ค. ๋ฌธ์๋ ์ด ์ฌ์ค์ ๋ช ์์ ์ผ๋ก ๋ฐ์ํด์ผ ํฉ๋๋ค.
๋น์ ๋ง์ด ๋ง์, ๊ทธ๊ฒ์ ์๋์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ช
์์ ์ผ๋ก ์ธ๊ธํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. 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
์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์, ๋๋ ๊ฐ๋จํ ๋ฌธ์ ๋ก ์์ํ๋ค. ๋ฌธ์์ด, ์ซ์ ๋ฐ ๊ฐ๋ฅํ๋ฉด NaN์ธ ์ ๋ ฅ์ด ์์ต๋๋ค. parseInt ๋ฐ isFinite๋ฅผ ์ฌ์ฉํ์ฌ parse int๊ฐ ์ฑ๊ณตํ๋์ง ํ ์คํธํ๋ ๊ธฐ๋ณธ JavaScript์ ๊ฐ๋จํ ์๋ฃจ์ ์ด ์์ต๋๋ค. ๋จ์ํ์ง๋ง ์์ ํ ๊นจ๋ํ์ง ์๊ฑฐ๋ ๋ด ๋ชฉํ๋ฅผ ์ค๋ช ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ ์ด๋ฌํ ์ข ๋ฅ์ ์์ ์ ์ํํ๊ธฐ ์ํด ์์ ํ ๋ฉ์ง goto ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๊ธฐ ๊ฒ์ฌ์์ ๊ฐ์ ์ทจํ๊ณ ๊ทธ๊ฒ์ด ์ซ์์ธ์ง ์๋ ค์ฃผ๋ ํจ์๋ฅผ ์ฐพ์์ต๋๋ค. ์ด ํจ์๋ ์ผ๋ฐ์ ์ธ ์ ์์ ๋ฐ๋ผ ์ ๊ฐ ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฒซ์งธ, ์ด๊ฒ์ผ๋ก ๋ฌธ์์ ํ ์ค์ ์ถ๊ฐํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ ์ฒ์ ์์ ์ ์ ํฉํ ๊ธฐ๋ฅ์ ์ป๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ์ ์ ์์ต๋๊น? ๋์งธ, ์ด๊ฒ์ด ์๋ฏธ ์๋ ์๋ฅผ ๋ค์ ๋ฌป์ต๋๋ค.
์ธ์ด์ ๋ํด ์์์ผ ํ ๋ชจ๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๋ฐ๋ผ์ 8ํ๋ ๋์์ด ๋์๊ฒ ์ค ์ ์๋ ์ด๋์ด ์๋ฃจ์ ์์ ๋งน๋ชฉ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ฉ์ง ๋ฌธ์๋ฅผ ํตํด ๋๋จธ์ง ์ฌ๋๋ค์ ๊ต์กํ๋ ๋ฐ ์ผ๋ถ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์๊ฐ ๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.