[{"data":1,"prerenderedAt":1491},["ShallowReactive",2],{"content-/number-isfinite-explained":3,"all-pages-for-dir":1489,"og-image-/number-isfinite-explained":1490},{"id":4,"title":5,"body":6,"category":1474,"description":1475,"extension":1476,"meta":1477,"navigation":116,"ogImage":1478,"path":1479,"project_name":1478,"published":1480,"publishedAt":1481,"seo":1482,"stem":1483,"tags":1484,"todo":1478,"unpublished":1480,"updatedAt":1478,"__hash__":1488},"pages/2026-06/2026-06-09/number-isfinite-explained.md","Number.isFinite と isFinite の違い ― JavaScript で「有限の数か」を判定する正しい書き方",{"type":7,"value":8,"toc":1461},"minimark",[9,13,17,42,236,251,254,261,279,458,467,469,473,479,694,724,831,833,837,851,999,1020,1022,1026,1039,1157,1172,1174,1181,1191,1356,1361,1363,1366,1408,1410,1413,1440,1443,1457],[10,11,5],"h1",{"id":12},"numberisfinite-と-isfinite-の違い-javascript-で有限の数かを判定する正しい書き方",[14,15,16],"h2",{"id":16},"結論",[18,19,20,21,29,30,33,34,37,38,41],"p",{},"JavaScript で「有限の数値か」を判定するなら、",[22,23,24,28],"strong",{},[25,26,27],"code",{},"Number.isFinite(x)"," を使う","。グローバルの ",[25,31,32],{},"isFinite(x)"," は引数を Number に型強制してから判定するため、",[25,35,36],{},"isFinite(\"123\")"," のような文字列で ",[25,39,40],{},"true"," を返してしまう。",[43,44,49],"pre",{"className":45,"code":46,"language":47,"meta":48,"style":48},"language-javascript shiki shiki-themes vitesse-light vitesse-light","isFinite(\"123\")          // ✅ true（文字列なのに true）\nisFinite(\"\")             // ✅ true（空文字なのに true、\"\" は 0 に変換される）\nisFinite(true)           // ✅ true（boolean なのに true）\n\nNumber.isFinite(\"123\")   // ❌ false\nNumber.isFinite(\"\")      // ❌ false\nNumber.isFinite(true)    // ❌ false\nNumber.isFinite(123)     // ✅ true\nNumber.isFinite(NaN)     // ❌ false\nNumber.isFinite(Infinity)// ❌ false\n","javascript","",[25,50,51,81,96,111,118,143,161,179,198,217],{"__ignoreMap":48},[52,53,56,60,64,68,72,74,77],"span",{"class":54,"line":55},"line",1,[52,57,59],{"class":58},"senZ8","isFinite",[52,61,63],{"class":62},"shFtX","(",[52,65,67],{"class":66},"sMJiu","\"",[52,69,71],{"class":70},"sdGka","123",[52,73,67],{"class":66},[52,75,76],{"class":62},")",[52,78,80],{"class":79},"sxvE3","          // ✅ true（文字列なのに true）\n",[52,82,84,86,88,91,93],{"class":54,"line":83},2,[52,85,59],{"class":58},[52,87,63],{"class":62},[52,89,90],{"class":66},"\"\"",[52,92,76],{"class":62},[52,94,95],{"class":79},"             // ✅ true（空文字なのに true、\"\" は 0 に変換される）\n",[52,97,99,101,103,106,108],{"class":54,"line":98},3,[52,100,59],{"class":58},[52,102,63],{"class":62},[52,104,40],{"class":105},"sHkkW",[52,107,76],{"class":62},[52,109,110],{"class":79},"           // ✅ true（boolean なのに true）\n",[52,112,114],{"class":54,"line":113},4,[52,115,117],{"emptyLinePlaceholder":116},true,"\n",[52,119,121,125,128,130,132,134,136,138,140],{"class":54,"line":120},5,[52,122,124],{"class":123},"s4oTP","Number",[52,126,127],{"class":62},".",[52,129,59],{"class":58},[52,131,63],{"class":62},[52,133,67],{"class":66},[52,135,71],{"class":70},[52,137,67],{"class":66},[52,139,76],{"class":62},[52,141,142],{"class":79},"   // ❌ false\n",[52,144,146,148,150,152,154,156,158],{"class":54,"line":145},6,[52,147,124],{"class":123},[52,149,127],{"class":62},[52,151,59],{"class":58},[52,153,63],{"class":62},[52,155,90],{"class":66},[52,157,76],{"class":62},[52,159,160],{"class":79},"      // ❌ false\n",[52,162,164,166,168,170,172,174,176],{"class":54,"line":163},7,[52,165,124],{"class":123},[52,167,127],{"class":62},[52,169,59],{"class":58},[52,171,63],{"class":62},[52,173,40],{"class":105},[52,175,76],{"class":62},[52,177,178],{"class":79},"    // ❌ false\n",[52,180,182,184,186,188,190,193,195],{"class":54,"line":181},8,[52,183,124],{"class":123},[52,185,127],{"class":62},[52,187,59],{"class":58},[52,189,63],{"class":62},[52,191,71],{"class":192},"sM54T",[52,194,76],{"class":62},[52,196,197],{"class":79},"     // ✅ true\n",[52,199,201,203,205,207,209,212,214],{"class":54,"line":200},9,[52,202,124],{"class":123},[52,204,127],{"class":62},[52,206,59],{"class":58},[52,208,63],{"class":62},[52,210,211],{"class":105},"NaN",[52,213,76],{"class":62},[52,215,216],{"class":79},"     // ❌ false\n",[52,218,220,222,224,226,228,231,233],{"class":54,"line":219},10,[52,221,124],{"class":123},[52,223,127],{"class":62},[52,225,59],{"class":58},[52,227,63],{"class":62},[52,229,230],{"class":105},"Infinity",[52,232,76],{"class":62},[52,234,235],{"class":79},"// ❌ false\n",[18,237,238,239,242,243,246,247,250],{},"ES6 で導入された ",[25,240,241],{},"Number.isFinite"," は ",[22,244,245],{},"型強制を行わない","。引数が Number 型でなければ無条件で ",[25,248,249],{},"false"," を返す。これが「安全な版」と呼ばれる理由。",[252,253],"hr",{},[14,255,257,258,260],{"id":256},"なぜ-global-の-isfinite-は信用できないのか","なぜ global の ",[25,259,59],{}," は信用できないのか",[18,262,263,264,267,268,271,272,275,276,278],{},"ES5 以前から存在する ",[25,265,266],{},"isFinite()"," は、内部で ",[25,269,270],{},"ToNumber(x)"," を呼んでから有限性を判定する。",[25,273,274],{},"ToNumber"," の挙動が以下のように直感に反するため、文字列や真偽値で予期せず ",[25,277,40],{}," が返る。",[280,281,282,302],"table",{},[283,284,285],"thead",{},[286,287,288,292,297],"tr",{},[289,290,291],"th",{},"入力",[289,293,294,296],{},[25,295,274],{}," の結果",[289,298,299,301],{},[25,300,59],{}," の戻り値",[303,304,305,321,336,351,366,381,396,413,428,443],"tbody",{},[286,306,307,313,317],{},[308,309,310],"td",{},[25,311,312],{},"\"123\"",[308,314,315],{},[25,316,71],{},[308,318,319],{},[25,320,40],{},[286,322,323,327,332],{},[308,324,325],{},[25,326,90],{},[308,328,329],{},[25,330,331],{},"0",[308,333,334],{},[25,335,40],{},[286,337,338,343,347],{},[308,339,340],{},[25,341,342],{},"\" \"",[308,344,345],{},[25,346,331],{},[308,348,349],{},[25,350,40],{},[286,352,353,358,362],{},[308,354,355],{},[25,356,357],{},"null",[308,359,360],{},[25,361,331],{},[308,363,364],{},[25,365,40],{},[286,367,368,372,377],{},[308,369,370],{},[25,371,40],{},[308,373,374],{},[25,375,376],{},"1",[308,378,379],{},[25,380,40],{},[286,382,383,388,392],{},[308,384,385],{},[25,386,387],{},"[]",[308,389,390],{},[25,391,331],{},[308,393,394],{},[25,395,40],{},[286,397,398,403,408],{},[308,399,400],{},[25,401,402],{},"[42]",[308,404,405],{},[25,406,407],{},"42",[308,409,410,412],{},[25,411,40],{},"（要素1つの配列は数値化される）",[286,414,415,420,424],{},[308,416,417],{},[25,418,419],{},"\"abc\"",[308,421,422],{},[25,423,211],{},[308,425,426],{},[25,427,249],{},[286,429,430,435,439],{},[308,431,432],{},[25,433,434],{},"undefined",[308,436,437],{},[25,438,211],{},[308,440,441],{},[25,442,249],{},[286,444,445,450,454],{},[308,446,447],{},[25,448,449],{},"{}",[308,451,452],{},[25,453,211],{},[308,455,456],{},[25,457,249],{},[18,459,460,463,464,466],{},[25,461,462],{},"isFinite([])"," が ",[25,465,40],{}," を返すのは、ほぼ確実にバグの温床になる。",[252,468],{},[14,470,472],{"id":471},"実用例入力バリデーション","実用例：入力バリデーション",[18,474,475,476,478],{},"ユーザー入力（フォームから来た値）が「有限の数値か」を確認したい場面で ",[25,477,59],{}," を使ってはいけない。",[43,480,482],{"className":45,"code":481,"language":47,"meta":48,"style":48},"// ❌ NG: 文字列のまま判定して true になる\nfunction isValidPrice(value) {\n  return isFinite(value)\n}\nisValidPrice(\"123abc\")  // false（\"123abc\" → NaN）\nisValidPrice(\"123\")     // true ← これが嬉しくない（数値ではなく文字列）\nisValidPrice(\"\")        // true ← これは絶対嬉しくない\n\n// ✅ OK: 明示的に Number 変換してから判定\nfunction isValidPrice(value) {\n  const num = Number(value)\n  return Number.isFinite(num)\n}\nisValidPrice(\"123abc\")  // false\nisValidPrice(\"123\")     // true\nisValidPrice(\"\")        // false（\"\" → 0 だが、Number.isFinite(0) は true なので注意）\n",[25,483,484,489,508,523,528,547,564,577,581,586,600,621,639,644,662,680],{"__ignoreMap":48},[52,485,486],{"class":54,"line":55},[52,487,488],{"class":79},"// ❌ NG: 文字列のまま判定して true になる\n",[52,490,491,495,498,500,503,505],{"class":54,"line":83},[52,492,494],{"class":493},"stQ0i","function",[52,496,497],{"class":58}," isValidPrice",[52,499,63],{"class":62},[52,501,502],{"class":123},"value",[52,504,76],{"class":62},[52,506,507],{"class":62}," {\n",[52,509,510,513,516,518,520],{"class":54,"line":98},[52,511,512],{"class":105},"  return",[52,514,515],{"class":58}," isFinite",[52,517,63],{"class":62},[52,519,502],{"class":123},[52,521,522],{"class":62},")\n",[52,524,525],{"class":54,"line":113},[52,526,527],{"class":62},"}\n",[52,529,530,533,535,537,540,542,544],{"class":54,"line":120},[52,531,532],{"class":58},"isValidPrice",[52,534,63],{"class":62},[52,536,67],{"class":66},[52,538,539],{"class":70},"123abc",[52,541,67],{"class":66},[52,543,76],{"class":62},[52,545,546],{"class":79},"  // false（\"123abc\" → NaN）\n",[52,548,549,551,553,555,557,559,561],{"class":54,"line":145},[52,550,532],{"class":58},[52,552,63],{"class":62},[52,554,67],{"class":66},[52,556,71],{"class":70},[52,558,67],{"class":66},[52,560,76],{"class":62},[52,562,563],{"class":79},"     // true ← これが嬉しくない（数値ではなく文字列）\n",[52,565,566,568,570,572,574],{"class":54,"line":163},[52,567,532],{"class":58},[52,569,63],{"class":62},[52,571,90],{"class":66},[52,573,76],{"class":62},[52,575,576],{"class":79},"        // true ← これは絶対嬉しくない\n",[52,578,579],{"class":54,"line":181},[52,580,117],{"emptyLinePlaceholder":116},[52,582,583],{"class":54,"line":200},[52,584,585],{"class":79},"// ✅ OK: 明示的に Number 変換してから判定\n",[52,587,588,590,592,594,596,598],{"class":54,"line":219},[52,589,494],{"class":493},[52,591,497],{"class":58},[52,593,63],{"class":62},[52,595,502],{"class":123},[52,597,76],{"class":62},[52,599,507],{"class":62},[52,601,603,606,609,612,615,617,619],{"class":54,"line":602},11,[52,604,605],{"class":493},"  const",[52,607,608],{"class":123}," num",[52,610,611],{"class":62}," =",[52,613,614],{"class":58}," Number",[52,616,63],{"class":62},[52,618,502],{"class":123},[52,620,522],{"class":62},[52,622,624,626,628,630,632,634,637],{"class":54,"line":623},12,[52,625,512],{"class":105},[52,627,614],{"class":123},[52,629,127],{"class":62},[52,631,59],{"class":58},[52,633,63],{"class":62},[52,635,636],{"class":123},"num",[52,638,522],{"class":62},[52,640,642],{"class":54,"line":641},13,[52,643,527],{"class":62},[52,645,647,649,651,653,655,657,659],{"class":54,"line":646},14,[52,648,532],{"class":58},[52,650,63],{"class":62},[52,652,67],{"class":66},[52,654,539],{"class":70},[52,656,67],{"class":66},[52,658,76],{"class":62},[52,660,661],{"class":79},"  // false\n",[52,663,665,667,669,671,673,675,677],{"class":54,"line":664},15,[52,666,532],{"class":58},[52,668,63],{"class":62},[52,670,67],{"class":66},[52,672,71],{"class":70},[52,674,67],{"class":66},[52,676,76],{"class":62},[52,678,679],{"class":79},"     // true\n",[52,681,683,685,687,689,691],{"class":54,"line":682},16,[52,684,532],{"class":58},[52,686,63],{"class":62},[52,688,90],{"class":66},[52,690,76],{"class":62},[52,692,693],{"class":79},"        // false（\"\" → 0 だが、Number.isFinite(0) は true なので注意）\n",[18,695,696,697,699,700,703,704,706,707,242,710,712,713,716,717,719,720,723],{},"最後のケースで注意。",[25,698,90],{}," を ",[25,701,702],{},"Number(\"\")"," すると ",[25,705,331],{}," になり、",[25,708,709],{},"Number.isFinite(0)",[25,711,40],{},"。つまり「",[22,714,715],{},"空文字を有効な数として受け入れたくない","」場合は、",[25,718,241],{}," の前に",[22,721,722],{},"空文字チェック","を入れる必要がある。",[43,725,727],{"className":45,"code":726,"language":47,"meta":48,"style":48},"function isValidPrice(value) {\n  if (typeof value === 'string' && value.trim() === '') return false\n  const num = Number(value)\n  return Number.isFinite(num)\n}\n",[25,728,729,743,795,811,827],{"__ignoreMap":48},[52,730,731,733,735,737,739,741],{"class":54,"line":55},[52,732,494],{"class":493},[52,734,497],{"class":58},[52,736,63],{"class":62},[52,738,502],{"class":123},[52,740,76],{"class":62},[52,742,507],{"class":62},[52,744,745,748,751,754,757,760,763,766,769,772,774,776,779,782,784,787,789,792],{"class":54,"line":83},[52,746,747],{"class":105},"  if",[52,749,750],{"class":62}," (",[52,752,753],{"class":493},"typeof",[52,755,756],{"class":123}," value",[52,758,759],{"class":493}," ===",[52,761,762],{"class":66}," '",[52,764,765],{"class":70},"string",[52,767,768],{"class":66},"'",[52,770,771],{"class":493}," &&",[52,773,756],{"class":123},[52,775,127],{"class":62},[52,777,778],{"class":58},"trim",[52,780,781],{"class":62},"()",[52,783,759],{"class":493},[52,785,786],{"class":66}," ''",[52,788,76],{"class":62},[52,790,791],{"class":105}," return",[52,793,794],{"class":105}," false\n",[52,796,797,799,801,803,805,807,809],{"class":54,"line":98},[52,798,605],{"class":493},[52,800,608],{"class":123},[52,802,611],{"class":62},[52,804,614],{"class":58},[52,806,63],{"class":62},[52,808,502],{"class":123},[52,810,522],{"class":62},[52,812,813,815,817,819,821,823,825],{"class":54,"line":113},[52,814,512],{"class":105},[52,816,614],{"class":123},[52,818,127],{"class":62},[52,820,59],{"class":58},[52,822,63],{"class":62},[52,824,636],{"class":123},[52,826,522],{"class":62},[52,828,829],{"class":54,"line":120},[52,830,527],{"class":62},[252,832],{},[14,834,836],{"id":835},"typescript-での型ガードとの組み合わせ","TypeScript での型ガードとの組み合わせ",[18,838,839,840,843,844,847,848,850],{},"TypeScript で「",[25,841,842],{},"unknown"," から ",[25,845,846],{},"number"," への型絞り込み」をしたい場合、",[25,849,241],{}," を型ガードに使うと安全。",[43,852,856],{"className":853,"code":854,"language":855,"meta":48,"style":48},"language-typescript shiki shiki-themes vitesse-light vitesse-light","function isFiniteNumber(value: unknown): value is number {\n  return typeof value === 'number' && Number.isFinite(value)\n}\n\nconst x: unknown = 42\nif (isFiniteNumber(x)) {\n  // ここで x は number として扱える\n  console.log(x.toFixed(2))\n}\n","typescript",[25,857,858,888,919,923,927,944,963,968,995],{"__ignoreMap":48},[52,859,860,862,865,867,869,872,875,878,880,883,886],{"class":54,"line":55},[52,861,494],{"class":493},[52,863,864],{"class":58}," isFiniteNumber",[52,866,63],{"class":62},[52,868,502],{"class":123},[52,870,871],{"class":62},": ",[52,873,842],{"class":874},"sSkh3",[52,876,877],{"class":62},"):",[52,879,756],{"class":123},[52,881,882],{"class":493}," is",[52,884,885],{"class":874}," number",[52,887,507],{"class":62},[52,889,890,892,895,897,899,901,903,905,907,909,911,913,915,917],{"class":54,"line":83},[52,891,512],{"class":105},[52,893,894],{"class":493}," typeof",[52,896,756],{"class":123},[52,898,759],{"class":493},[52,900,762],{"class":66},[52,902,846],{"class":70},[52,904,768],{"class":66},[52,906,771],{"class":493},[52,908,614],{"class":123},[52,910,127],{"class":62},[52,912,59],{"class":58},[52,914,63],{"class":62},[52,916,502],{"class":123},[52,918,522],{"class":62},[52,920,921],{"class":54,"line":98},[52,922,527],{"class":62},[52,924,925],{"class":54,"line":113},[52,926,117],{"emptyLinePlaceholder":116},[52,928,929,932,935,937,939,941],{"class":54,"line":120},[52,930,931],{"class":493},"const ",[52,933,934],{"class":123},"x",[52,936,871],{"class":62},[52,938,842],{"class":874},[52,940,611],{"class":62},[52,942,943],{"class":192}," 42\n",[52,945,946,949,951,954,956,958,961],{"class":54,"line":145},[52,947,948],{"class":105},"if",[52,950,750],{"class":62},[52,952,953],{"class":58},"isFiniteNumber",[52,955,63],{"class":62},[52,957,934],{"class":123},[52,959,960],{"class":62},"))",[52,962,507],{"class":62},[52,964,965],{"class":54,"line":163},[52,966,967],{"class":79},"  // ここで x は number として扱える\n",[52,969,970,973,975,978,980,982,984,987,989,992],{"class":54,"line":181},[52,971,972],{"class":123},"  console",[52,974,127],{"class":62},[52,976,977],{"class":58},"log",[52,979,63],{"class":62},[52,981,934],{"class":123},[52,983,127],{"class":62},[52,985,986],{"class":58},"toFixed",[52,988,63],{"class":62},[52,990,991],{"class":192},"2",[52,993,994],{"class":62},"))\n",[52,996,997],{"class":54,"line":200},[52,998,527],{"class":62},[18,1000,1001,1004,1005,1007,1008,1010,1011,1013,1014,1016,1017,1019],{},[25,1002,1003],{},"typeof value === 'number'"," を先にチェックする理由は、",[25,1006,241],{}," 自体は型ガードではないため。",[25,1009,753],{}," で number 型に絞ったうえで ",[25,1012,241],{}," で ",[25,1015,211],{}," と ",[25,1018,230],{}," を除外する流れ。",[252,1021],{},[14,1023,1025],{"id":1024},"nan-infinity-の扱い","NaN / Infinity の扱い",[18,1027,1028,242,1030,1016,1032,1035,1036,1038],{},[25,1029,241],{},[25,1031,211],{},[25,1033,1034],{},"±Infinity"," を確実に ",[25,1037,249],{}," と判定する。これが「安全」と呼ばれる重要な理由。",[43,1040,1042],{"className":45,"code":1041,"language":47,"meta":48,"style":48},"Number.isFinite(NaN)        // false\nNumber.isFinite(Infinity)   // false\nNumber.isFinite(-Infinity)  // false\nNumber.isFinite(0)          // true\nNumber.isFinite(-0)         // true\nNumber.isFinite(0.1 + 0.2)  // true（浮動小数の誤差はあるが有限）\n",[25,1043,1044,1061,1078,1097,1114,1133],{"__ignoreMap":48},[52,1045,1046,1048,1050,1052,1054,1056,1058],{"class":54,"line":55},[52,1047,124],{"class":123},[52,1049,127],{"class":62},[52,1051,59],{"class":58},[52,1053,63],{"class":62},[52,1055,211],{"class":105},[52,1057,76],{"class":62},[52,1059,1060],{"class":79},"        // false\n",[52,1062,1063,1065,1067,1069,1071,1073,1075],{"class":54,"line":83},[52,1064,124],{"class":123},[52,1066,127],{"class":62},[52,1068,59],{"class":58},[52,1070,63],{"class":62},[52,1072,230],{"class":105},[52,1074,76],{"class":62},[52,1076,1077],{"class":79},"   // false\n",[52,1079,1080,1082,1084,1086,1088,1091,1093,1095],{"class":54,"line":98},[52,1081,124],{"class":123},[52,1083,127],{"class":62},[52,1085,59],{"class":58},[52,1087,63],{"class":62},[52,1089,1090],{"class":493},"-",[52,1092,230],{"class":105},[52,1094,76],{"class":62},[52,1096,661],{"class":79},[52,1098,1099,1101,1103,1105,1107,1109,1111],{"class":54,"line":113},[52,1100,124],{"class":123},[52,1102,127],{"class":62},[52,1104,59],{"class":58},[52,1106,63],{"class":62},[52,1108,331],{"class":192},[52,1110,76],{"class":62},[52,1112,1113],{"class":79},"          // true\n",[52,1115,1116,1118,1120,1122,1124,1126,1128,1130],{"class":54,"line":120},[52,1117,124],{"class":123},[52,1119,127],{"class":62},[52,1121,59],{"class":58},[52,1123,63],{"class":62},[52,1125,1090],{"class":493},[52,1127,331],{"class":192},[52,1129,76],{"class":62},[52,1131,1132],{"class":79},"         // true\n",[52,1134,1135,1137,1139,1141,1143,1146,1149,1152,1154],{"class":54,"line":145},[52,1136,124],{"class":123},[52,1138,127],{"class":62},[52,1140,59],{"class":58},[52,1142,63],{"class":62},[52,1144,1145],{"class":192},"0.1",[52,1147,1148],{"class":493}," +",[52,1150,1151],{"class":192}," 0.2",[52,1153,76],{"class":62},[52,1155,1156],{"class":79},"  // true（浮動小数の誤差はあるが有限）\n",[18,1158,1159,1161,1162,1165,1166,1168,1169,1171],{},[25,1160,211],{}," を弾く目的だけなら ",[25,1163,1164],{},"Number.isNaN(x)"," でも良いが、",[25,1167,230],{}," も同時に弾きたい場面の方が多いので、最初から ",[25,1170,241],{}," を覚えておく方が実務的。",[252,1173],{},[14,1175,1177,1178,1180],{"id":1176},"eslint-で-global-の-isfinite-を禁止する","ESLint で global の ",[25,1179,59],{}," を禁止する",[18,1182,1183,1184,1187,1188,1190],{},"実プロジェクトでは、ESLint の ",[25,1185,1186],{},"no-restricted-globals"," ルールでグローバルの ",[25,1189,59],{}," を禁止しておくのが安全。",[43,1192,1196],{"className":1193,"code":1194,"language":1195,"meta":48,"style":48},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n  \"rules\": {\n    \"no-restricted-globals\": [\n      \"error\",\n      {\n        \"name\": \"isFinite\",\n        \"message\": \"Use Number.isFinite instead.\"\n      },\n      {\n        \"name\": \"isNaN\",\n        \"message\": \"Use Number.isNaN instead.\"\n      }\n    ]\n  }\n}\n","json",[25,1197,1198,1203,1220,1234,1247,1252,1273,1292,1297,1301,1320,1337,1342,1347,1352],{"__ignoreMap":48},[52,1199,1200],{"class":54,"line":55},[52,1201,1202],{"class":62},"{\n",[52,1204,1205,1209,1213,1215,1218],{"class":54,"line":83},[52,1206,1208],{"class":1207},"sqvqQ","  \"",[52,1210,1212],{"class":1211},"sz8Xr","rules",[52,1214,67],{"class":1207},[52,1216,1217],{"class":62},":",[52,1219,507],{"class":62},[52,1221,1222,1225,1227,1229,1231],{"class":54,"line":98},[52,1223,1224],{"class":1207},"    \"",[52,1226,1186],{"class":1211},[52,1228,67],{"class":1207},[52,1230,1217],{"class":62},[52,1232,1233],{"class":62}," [\n",[52,1235,1236,1239,1242,1244],{"class":54,"line":113},[52,1237,1238],{"class":66},"      \"",[52,1240,1241],{"class":70},"error",[52,1243,67],{"class":66},[52,1245,1246],{"class":62},",\n",[52,1248,1249],{"class":54,"line":120},[52,1250,1251],{"class":62},"      {\n",[52,1253,1254,1257,1260,1262,1264,1267,1269,1271],{"class":54,"line":145},[52,1255,1256],{"class":1207},"        \"",[52,1258,1259],{"class":1211},"name",[52,1261,67],{"class":1207},[52,1263,1217],{"class":62},[52,1265,1266],{"class":66}," \"",[52,1268,59],{"class":70},[52,1270,67],{"class":66},[52,1272,1246],{"class":62},[52,1274,1275,1277,1280,1282,1284,1286,1289],{"class":54,"line":163},[52,1276,1256],{"class":1207},[52,1278,1279],{"class":1211},"message",[52,1281,67],{"class":1207},[52,1283,1217],{"class":62},[52,1285,1266],{"class":66},[52,1287,1288],{"class":70},"Use Number.isFinite instead.",[52,1290,1291],{"class":66},"\"\n",[52,1293,1294],{"class":54,"line":181},[52,1295,1296],{"class":62},"      },\n",[52,1298,1299],{"class":54,"line":200},[52,1300,1251],{"class":62},[52,1302,1303,1305,1307,1309,1311,1313,1316,1318],{"class":54,"line":219},[52,1304,1256],{"class":1207},[52,1306,1259],{"class":1211},[52,1308,67],{"class":1207},[52,1310,1217],{"class":62},[52,1312,1266],{"class":66},[52,1314,1315],{"class":70},"isNaN",[52,1317,67],{"class":66},[52,1319,1246],{"class":62},[52,1321,1322,1324,1326,1328,1330,1332,1335],{"class":54,"line":602},[52,1323,1256],{"class":1207},[52,1325,1279],{"class":1211},[52,1327,67],{"class":1207},[52,1329,1217],{"class":62},[52,1331,1266],{"class":66},[52,1333,1334],{"class":70},"Use Number.isNaN instead.",[52,1336,1291],{"class":66},[52,1338,1339],{"class":54,"line":623},[52,1340,1341],{"class":62},"      }\n",[52,1343,1344],{"class":54,"line":641},[52,1345,1346],{"class":62},"    ]\n",[52,1348,1349],{"class":54,"line":646},[52,1350,1351],{"class":62},"  }\n",[52,1353,1354],{"class":54,"line":664},[52,1355,527],{"class":62},[18,1357,1358,1360],{},[25,1359,1315],{}," も同じ理由（型強制）で global 版が危険なので、合わせて禁止しておくと良い。",[252,1362],{},[14,1364,1365],{"id":1365},"まとめ",[1367,1368,1369,1377,1386,1395,1402],"ul",{},[1370,1371,1372,1373,28],"li",{},"「有限の数か」を判定するなら ",[22,1374,1375],{},[25,1376,27],{},[1370,1378,1379,1380,242,1382,1385],{},"グローバルの ",[25,1381,32],{},[22,1383,1384],{},"型強制で文字列・真偽値・配列も true"," にする",[1370,1387,1388,1389,1391,1392,1394],{},"空文字（",[25,1390,90],{},"）を弾きたいなら、",[25,1393,241],{}," の前に明示チェックを入れる",[1370,1396,1397,1398,1401],{},"TypeScript では ",[25,1399,1400],{},"typeof === 'number'"," と組み合わせた型ガードにすると安全",[1370,1403,1404,1405,1407],{},"ESLint で ",[25,1406,1186],{}," を使い、グローバル版を禁止するのが実務的",[252,1409],{},[14,1411,1412],{"id":1412},"関連リンク",[1367,1414,1415,1426,1433],{},[1370,1416,1417],{},[1418,1419,1425],"a",{"href":1420,"target":1421,"rel":1422},"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite","_blank",[1423,1424],"noopener","noreferrer","MDN: Number.isFinite()",[1370,1427,1428],{},[1418,1429,1432],{"href":1430,"target":1421,"rel":1431},"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/isFinite",[1423,1424],"MDN: isFinite() (global)",[1370,1434,1435],{},[1418,1436,1439],{"href":1437,"target":1421,"rel":1438},"https://tc39.es/ecma262/#sec-number.isfinite",[1423,1424],"ECMAScript 仕様: Number.isFinite",[14,1441,1442],{"id":1442},"関連記事",[1367,1444,1445,1451],{},[1370,1446,1447],{},[1418,1448,1450],{"href":1449},"/strict-equality-vs-loose-equality","厳密等価演算子（===）と等価演算子（==）の違い",[1370,1452,1453],{},[1418,1454,1456],{"href":1455},"/iife-immediately-invoked-function-expression","IIFE（即時実行関数式）とは何か",[1458,1459,1460],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}",{"title":48,"searchDepth":83,"depth":83,"links":1462},[1463,1464,1466,1467,1468,1469,1471,1472,1473],{"id":16,"depth":83,"text":16},{"id":256,"depth":83,"text":1465},"なぜ global の isFinite は信用できないのか",{"id":471,"depth":83,"text":472},{"id":835,"depth":83,"text":836},{"id":1024,"depth":83,"text":1025},{"id":1176,"depth":83,"text":1470},"ESLint で global の isFinite を禁止する",{"id":1365,"depth":83,"text":1365},{"id":1412,"depth":83,"text":1412},{"id":1442,"depth":83,"text":1442},"dev","JavaScript の Number.isFinite と global の isFinite は名前が似ているが挙動が全く違う。isFinite('123') が true になるのに対し Number.isFinite('123') が false になる理由を、型強制の挙動と実用例で整理する。","md",{},null,"/number-isfinite-explained",false,"2026-06-09T00:00:00.000Z",{"title":5,"description":1475},"2026-06/2026-06-09/number-isfinite-explained",[1485,124,59,1486,1487],"JavaScript","型判定","TypeScript","oRn_ZF7LkO_j9G-4Ds432H9S6wzGrUbH0VBJpT8hVg4",[],"https://log.eurekapu.com/og/blog/number-isfinite-explained.png?v=2026-06-09T00%3A00%3A00.000Z&title=Number.isFinite%20%E3%81%A8%20isFinite%20%E3%81%AE%E9%81%95%E3%81%84%20%E2%80%95%20JavaScript%20%E3%81%A7%E3%80%8C%E6%9C%89%E9%99%90%E3%81%AE%E6%95%B0%E3%81%8B%E3%80%8D%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B%E6%AD%A3%E3%81%97%E3%81%84%E6%9B%B8%E3%81%8D%E6%96%B9&author=Kei%20Komatsu&sig=33e00f0ee07d03be",1782528850654]