[{"data":1,"prerenderedAt":1305},["ShallowReactive",2],{"content-/strict-equality-vs-loose-equality":3,"related-/strict-equality-vs-loose-equality":1255,"all-pages-for-dir":1303,"og-image-/strict-equality-vs-loose-equality":1304},{"id":4,"title":5,"body":6,"category":1238,"description":1239,"extension":1240,"meta":1241,"navigation":168,"path":1242,"project_name":1243,"published":1244,"publishedAt":1245,"seo":1246,"stem":1247,"tags":1248,"todo":1243,"unpublished":1244,"updatedAt":1243,"__hash__":1254},"pages/2026-06/2026-06-09/strict-equality-vs-loose-equality.md","厳密等価演算子（===）と等価演算子（==）の違い ― JavaScript で == を使わない方がいい理由",{"type":7,"value":8,"toc":1220},"minimark",[9,13,17,41,250,260,263,272,297,408,410,413,418,486,500,504,603,619,623,733,753,755,762,777,885,887,894,903,976,998,1005,1007,1011,1026,1101,1114,1116,1119,1161,1163,1166,1199,1202,1216],[10,11,5],"h1",{"id":12},"厳密等価演算子と等価演算子の違い-javascript-で-を使わない方がいい理由",[14,15,16],"h2",{"id":16},"結論",[18,19,20,21,29,30,33,34,37,38,40],"p",{},"JavaScript で値を比較するときは、",[22,23,24,28],"strong",{},[25,26,27],"code",{},"==="," を使う","。",[25,31,32],{},"=="," は型が違う値を比較する際に「型強制」を行うため、直感に反する結果になりやすい。実プロジェクトでは ESLint の ",[25,35,36],{},"eqeqeq"," ルールで ",[25,39,32],{}," を禁止しているケースが多い。",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-javascript shiki shiki-themes vitesse-light vitesse-light","0 == \"\"        // true（\"\" は 0 に変換される）\n0 == \"0\"       // true（\"0\" は 0 に変換される）\n0 == false     // true（false は 0 に変換される）\n\"\" == false    // true\n[] == false    // true（[] は \"\" に変換され、さらに 0 に）\nnull == undefined  // true（特別ルール）\n\"1\" == true    // true（true は 1、\"1\" も 1）\n\n0 === \"\"       // false\n0 === \"0\"      // false\n0 === false    // false\n[] === false   // false\nnull === undefined  // false\n\"1\" === true   // false\n","javascript","",[25,49,50,71,90,104,117,131,145,163,170,183,199,211,223,235],{"__ignoreMap":47},[51,52,55,59,63,67],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"sM54T","0",[51,60,62],{"class":61},"stQ0i"," ==",[51,64,66],{"class":65},"sMJiu"," \"\"",[51,68,70],{"class":69},"sxvE3","        // true（\"\" は 0 に変換される）\n",[51,72,74,76,78,81,84,87],{"class":53,"line":73},2,[51,75,58],{"class":57},[51,77,62],{"class":61},[51,79,80],{"class":65}," \"",[51,82,58],{"class":83},"sdGka",[51,85,86],{"class":65},"\"",[51,88,89],{"class":69},"       // true（\"0\" は 0 に変換される）\n",[51,91,93,95,97,101],{"class":53,"line":92},3,[51,94,58],{"class":57},[51,96,62],{"class":61},[51,98,100],{"class":99},"sHkkW"," false",[51,102,103],{"class":69},"     // true（false は 0 に変換される）\n",[51,105,107,110,112,114],{"class":53,"line":106},4,[51,108,109],{"class":65},"\"\"",[51,111,62],{"class":61},[51,113,100],{"class":99},[51,115,116],{"class":69},"    // true\n",[51,118,120,124,126,128],{"class":53,"line":119},5,[51,121,123],{"class":122},"shFtX","[]",[51,125,62],{"class":61},[51,127,100],{"class":99},[51,129,130],{"class":69},"    // true（[] は \"\" に変換され、さらに 0 に）\n",[51,132,134,137,139,142],{"class":53,"line":133},6,[51,135,136],{"class":61},"null",[51,138,62],{"class":61},[51,140,141],{"class":61}," undefined",[51,143,144],{"class":69},"  // true（特別ルール）\n",[51,146,148,150,153,155,157,160],{"class":53,"line":147},7,[51,149,86],{"class":65},[51,151,152],{"class":83},"1",[51,154,86],{"class":65},[51,156,62],{"class":61},[51,158,159],{"class":99}," true",[51,161,162],{"class":69},"    // true（true は 1、\"1\" も 1）\n",[51,164,166],{"class":53,"line":165},8,[51,167,169],{"emptyLinePlaceholder":168},true,"\n",[51,171,173,175,178,180],{"class":53,"line":172},9,[51,174,58],{"class":57},[51,176,177],{"class":61}," ===",[51,179,66],{"class":65},[51,181,182],{"class":69},"       // false\n",[51,184,186,188,190,192,194,196],{"class":53,"line":185},10,[51,187,58],{"class":57},[51,189,177],{"class":61},[51,191,80],{"class":65},[51,193,58],{"class":83},[51,195,86],{"class":65},[51,197,198],{"class":69},"      // false\n",[51,200,202,204,206,208],{"class":53,"line":201},11,[51,203,58],{"class":57},[51,205,177],{"class":61},[51,207,100],{"class":99},[51,209,210],{"class":69},"    // false\n",[51,212,214,216,218,220],{"class":53,"line":213},12,[51,215,123],{"class":122},[51,217,177],{"class":61},[51,219,100],{"class":99},[51,221,222],{"class":69},"   // false\n",[51,224,226,228,230,232],{"class":53,"line":225},13,[51,227,136],{"class":61},[51,229,177],{"class":61},[51,231,141],{"class":61},[51,233,234],{"class":69},"  // false\n",[51,236,238,240,242,244,246,248],{"class":53,"line":237},14,[51,239,86],{"class":65},[51,241,152],{"class":83},[51,243,86],{"class":65},[51,245,177],{"class":61},[51,247,159],{"class":99},[51,249,222],{"class":69},[18,251,252,254,255,259],{},[25,253,32],{}," は仕様の中に「型変換のルール」が10行以上ある複雑な演算子。覚えるより、",[22,256,257,28],{},[25,258,27],{},"方が安全。",[261,262],"hr",{},[14,264,266,268,269,271],{"id":265},"と-の違いを一行で",[25,267,27],{}," と ",[25,270,32],{}," の違いを一行で",[273,274,275,287],"ul",{},[276,277,278,283,284],"li",{},[22,279,280,282],{},[25,281,27],{},"（厳密等価）",": 型も値も完全に一致したときだけ ",[25,285,286],{},"true",[276,288,289,294,295],{},[22,290,291,293],{},[25,292,32],{},"（等価）",": 型が違ったら片方を変換してから比較。値が一致したら ",[25,296,286],{},[42,298,300],{"className":44,"code":299,"language":46,"meta":47,"style":47},"// 型が同じなら ===  と == は同じ結果\n1 === 1     // true\n1 == 1      // true\n\"a\" === \"a\" // true\n\"a\" == \"a\"  // true\n\n// 型が違うと結果が分かれる\n1 === \"1\"   // false（型が違うので即 false）\n1 == \"1\"    // true（\"1\" を 1 に変換してから比較）\n",[25,301,302,307,319,330,350,369,373,378,393],{"__ignoreMap":47},[51,303,304],{"class":53,"line":54},[51,305,306],{"class":69},"// 型が同じなら ===  と == は同じ結果\n",[51,308,309,311,313,316],{"class":53,"line":73},[51,310,152],{"class":57},[51,312,177],{"class":61},[51,314,315],{"class":57}," 1",[51,317,318],{"class":69},"     // true\n",[51,320,321,323,325,327],{"class":53,"line":92},[51,322,152],{"class":57},[51,324,62],{"class":61},[51,326,315],{"class":57},[51,328,329],{"class":69},"      // true\n",[51,331,332,334,337,339,341,343,345,347],{"class":53,"line":106},[51,333,86],{"class":65},[51,335,336],{"class":83},"a",[51,338,86],{"class":65},[51,340,177],{"class":61},[51,342,80],{"class":65},[51,344,336],{"class":83},[51,346,86],{"class":65},[51,348,349],{"class":69}," // true\n",[51,351,352,354,356,358,360,362,364,366],{"class":53,"line":119},[51,353,86],{"class":65},[51,355,336],{"class":83},[51,357,86],{"class":65},[51,359,62],{"class":61},[51,361,80],{"class":65},[51,363,336],{"class":83},[51,365,86],{"class":65},[51,367,368],{"class":69},"  // true\n",[51,370,371],{"class":53,"line":133},[51,372,169],{"emptyLinePlaceholder":168},[51,374,375],{"class":53,"line":147},[51,376,377],{"class":69},"// 型が違うと結果が分かれる\n",[51,379,380,382,384,386,388,390],{"class":53,"line":165},[51,381,152],{"class":57},[51,383,177],{"class":61},[51,385,80],{"class":65},[51,387,152],{"class":83},[51,389,86],{"class":65},[51,391,392],{"class":69},"   // false（型が違うので即 false）\n",[51,394,395,397,399,401,403,405],{"class":53,"line":172},[51,396,152],{"class":57},[51,398,62],{"class":61},[51,400,80],{"class":65},[51,402,152],{"class":83},[51,404,86],{"class":65},[51,406,407],{"class":69},"    // true（\"1\" を 1 に変換してから比較）\n",[261,409],{},[14,411,412],{"id":412},"型強制で起こる典型的な落とし穴",[414,415,417],"h3",{"id":416},"_1-空文字と-0-が等しい","1. 空文字と 0 が等しい",[42,419,421],{"className":44,"code":420,"language":46,"meta":47,"style":47},"\"\" == 0          // true\n\"\" == false      // true\n0 == false       // true\n0 == \"0\"         // true\n\"\" == \"0\"        // false ← これは仕様の例外\n",[25,422,423,435,445,456,471],{"__ignoreMap":47},[51,424,425,427,429,432],{"class":53,"line":54},[51,426,109],{"class":65},[51,428,62],{"class":61},[51,430,431],{"class":57}," 0",[51,433,434],{"class":69},"          // true\n",[51,436,437,439,441,443],{"class":53,"line":73},[51,438,109],{"class":65},[51,440,62],{"class":61},[51,442,100],{"class":99},[51,444,329],{"class":69},[51,446,447,449,451,453],{"class":53,"line":92},[51,448,58],{"class":57},[51,450,62],{"class":61},[51,452,100],{"class":99},[51,454,455],{"class":69},"       // true\n",[51,457,458,460,462,464,466,468],{"class":53,"line":106},[51,459,58],{"class":57},[51,461,62],{"class":61},[51,463,80],{"class":65},[51,465,58],{"class":83},[51,467,86],{"class":65},[51,469,470],{"class":69},"         // true\n",[51,472,473,475,477,479,481,483],{"class":53,"line":119},[51,474,109],{"class":65},[51,476,62],{"class":61},[51,478,80],{"class":65},[51,480,58],{"class":83},[51,482,86],{"class":65},[51,484,485],{"class":69},"        // false ← これは仕様の例外\n",[18,487,488,489,492,493,496,497,499],{},"最後の ",[25,490,491],{},"\"\" == \"0\""," は ",[22,494,495],{},"両方が文字列のため型変換が起きず","、単純な文字列比較で false になる。型が違うと変換するが、同じ型なら変換しない、というのが ",[25,498,32],{}," のルール。同じ \"0っぽい\" 値同士でも結果が変わる。",[414,501,503],{"id":502},"_2-null-と-undefined-だけは特別扱い","2. null と undefined だけは特別扱い",[42,505,507],{"className":44,"code":506,"language":46,"meta":47,"style":47},"null == undefined   // true（特別ルール）\nnull == null        // true\nundefined == undefined // true\n\nnull == 0           // false\nnull == false       // false\nnull == \"\"          // false\n\nundefined == 0      // false\nundefined == false  // false\n",[25,508,509,520,532,543,547,558,568,579,583,593],{"__ignoreMap":47},[51,510,511,513,515,517],{"class":53,"line":54},[51,512,136],{"class":61},[51,514,62],{"class":61},[51,516,141],{"class":61},[51,518,519],{"class":69},"   // true（特別ルール）\n",[51,521,522,524,526,529],{"class":53,"line":73},[51,523,136],{"class":61},[51,525,62],{"class":61},[51,527,528],{"class":61}," null",[51,530,531],{"class":69},"        // true\n",[51,533,534,537,539,541],{"class":53,"line":92},[51,535,536],{"class":61},"undefined",[51,538,62],{"class":61},[51,540,141],{"class":61},[51,542,349],{"class":69},[51,544,545],{"class":53,"line":106},[51,546,169],{"emptyLinePlaceholder":168},[51,548,549,551,553,555],{"class":53,"line":119},[51,550,136],{"class":61},[51,552,62],{"class":61},[51,554,431],{"class":57},[51,556,557],{"class":69},"           // false\n",[51,559,560,562,564,566],{"class":53,"line":133},[51,561,136],{"class":61},[51,563,62],{"class":61},[51,565,100],{"class":99},[51,567,182],{"class":69},[51,569,570,572,574,576],{"class":53,"line":147},[51,571,136],{"class":61},[51,573,62],{"class":61},[51,575,66],{"class":65},[51,577,578],{"class":69},"          // false\n",[51,580,581],{"class":53,"line":165},[51,582,169],{"emptyLinePlaceholder":168},[51,584,585,587,589,591],{"class":53,"line":172},[51,586,536],{"class":61},[51,588,62],{"class":61},[51,590,431],{"class":57},[51,592,198],{"class":69},[51,594,595,597,599,601],{"class":53,"line":185},[51,596,536],{"class":61},[51,598,62],{"class":61},[51,600,100],{"class":99},[51,602,234],{"class":69},[18,604,605,268,607,492,609,29,612,614,615,618],{},[25,606,136],{},[25,608,536],{},[22,610,611],{},"互いにだけ等しい",[25,613,58],{}," や ",[25,616,617],{},"false"," とは等しくない。これは ECMAScript 仕様で明示的に決められたルール。",[414,620,622],{"id":621},"_3-配列オブジェクトとの比較","3. 配列・オブジェクトとの比較",[42,624,626],{"className":44,"code":625,"language":46,"meta":47,"style":47},"[] == false    // true（[] → \"\" → 0、false → 0）\n[0] == false   // true（[0] → \"0\" → 0）\n[] == 0        // true\n[] == \"\"       // true\n[1] == 1       // true（[1] → \"1\" → 1）\n[1, 2] == \"1,2\" // true（配列の toString は \"1,2\"）\n\n{} == false    // false（{} は \"[object Object]\" になる）\n",[25,627,628,639,656,666,676,691,717,721],{"__ignoreMap":47},[51,629,630,632,634,636],{"class":53,"line":54},[51,631,123],{"class":122},[51,633,62],{"class":61},[51,635,100],{"class":99},[51,637,638],{"class":69},"    // true（[] → \"\" → 0、false → 0）\n",[51,640,641,644,646,649,651,653],{"class":53,"line":73},[51,642,643],{"class":122},"[",[51,645,58],{"class":57},[51,647,648],{"class":122},"]",[51,650,62],{"class":61},[51,652,100],{"class":99},[51,654,655],{"class":69},"   // true（[0] → \"0\" → 0）\n",[51,657,658,660,662,664],{"class":53,"line":92},[51,659,123],{"class":122},[51,661,62],{"class":61},[51,663,431],{"class":57},[51,665,531],{"class":69},[51,667,668,670,672,674],{"class":53,"line":106},[51,669,123],{"class":122},[51,671,62],{"class":61},[51,673,66],{"class":65},[51,675,455],{"class":69},[51,677,678,680,682,684,686,688],{"class":53,"line":119},[51,679,643],{"class":122},[51,681,152],{"class":57},[51,683,648],{"class":122},[51,685,62],{"class":61},[51,687,315],{"class":57},[51,689,690],{"class":69},"       // true（[1] → \"1\" → 1）\n",[51,692,693,695,697,700,703,705,707,709,712,714],{"class":53,"line":133},[51,694,643],{"class":122},[51,696,152],{"class":57},[51,698,699],{"class":122},",",[51,701,702],{"class":57}," 2",[51,704,648],{"class":122},[51,706,62],{"class":61},[51,708,80],{"class":65},[51,710,711],{"class":83},"1,2",[51,713,86],{"class":65},[51,715,716],{"class":69}," // true（配列の toString は \"1,2\"）\n",[51,718,719],{"class":53,"line":147},[51,720,169],{"emptyLinePlaceholder":168},[51,722,723,726,728,730],{"class":53,"line":165},[51,724,725],{"class":122},"{}",[51,727,62],{"class":61},[51,729,100],{"class":99},[51,731,732],{"class":69},"    // false（{} は \"[object Object]\" になる）\n",[18,734,735,736,492,738,741,742,745,746,748,749,752],{},"オブジェクトと比較するとき、",[25,737,32],{},[25,739,740],{},"valueOf()"," または ",[25,743,744],{},"toString()"," を呼んでプリミティブに変換する。配列の ",[25,747,744],{}," はカンマ区切り文字列を返すので、",[25,750,751],{},"[1] == 1"," が成立してしまう。",[261,754],{},[14,756,758,759,761],{"id":757},"どんな時でも-で問題ないか","どんな時でも ",[25,760,27],{}," で問題ないか",[18,763,764,765,767,768,776],{},"ほぼ全ての場面で ",[25,766,27],{}," を使うべき。例外として",[22,769,770,771,268,773,775],{},"意図的に ",[25,772,136],{},[25,774,536],{}," を同じものとして扱いたい","ケースがあるが、その場合も明示的に書く方が読みやすい。",[42,778,780],{"className":44,"code":779,"language":46,"meta":47,"style":47},"// NG: 意図が不明\nif (value == null) { /* null か undefined */ }\n\n// OK: 意図が明示的\nif (value === null || value === undefined) { /* null か undefined */ }\n\n// 最近は Nullish 演算子で簡潔に\nconst x = value ?? defaultValue  // value が null/undefined なら defaultValue\n",[25,781,782,787,815,819,824,854,858,863],{"__ignoreMap":47},[51,783,784],{"class":53,"line":54},[51,785,786],{"class":69},"// NG: 意図が不明\n",[51,788,789,792,795,799,801,803,806,809,812],{"class":53,"line":73},[51,790,791],{"class":99},"if",[51,793,794],{"class":122}," (",[51,796,798],{"class":797},"s4oTP","value",[51,800,62],{"class":61},[51,802,528],{"class":61},[51,804,805],{"class":122},")",[51,807,808],{"class":122}," {",[51,810,811],{"class":69}," /* null か undefined */",[51,813,814],{"class":122}," }\n",[51,816,817],{"class":53,"line":92},[51,818,169],{"emptyLinePlaceholder":168},[51,820,821],{"class":53,"line":106},[51,822,823],{"class":69},"// OK: 意図が明示的\n",[51,825,826,828,830,832,834,836,839,842,844,846,848,850,852],{"class":53,"line":119},[51,827,791],{"class":99},[51,829,794],{"class":122},[51,831,798],{"class":797},[51,833,177],{"class":61},[51,835,528],{"class":61},[51,837,838],{"class":61}," ||",[51,840,841],{"class":797}," value",[51,843,177],{"class":61},[51,845,141],{"class":61},[51,847,805],{"class":122},[51,849,808],{"class":122},[51,851,811],{"class":69},[51,853,814],{"class":122},[51,855,856],{"class":53,"line":133},[51,857,169],{"emptyLinePlaceholder":168},[51,859,860],{"class":53,"line":147},[51,861,862],{"class":69},"// 最近は Nullish 演算子で簡潔に\n",[51,864,865,868,871,874,876,879,882],{"class":53,"line":165},[51,866,867],{"class":61},"const",[51,869,870],{"class":797}," x",[51,872,873],{"class":122}," =",[51,875,841],{"class":797},[51,877,878],{"class":61}," ??",[51,880,881],{"class":797}," defaultValue",[51,883,884],{"class":69},"  // value が null/undefined なら defaultValue\n",[261,886],{},[14,888,890,891,893],{"id":889},"eslint-で-を禁止する","ESLint で ",[25,892,32],{}," を禁止する",[18,895,896,897,899,900,902],{},"実プロジェクトでは ",[25,898,36],{}," ルールを設定して ",[25,901,32],{}," を禁止するのが普通。",[42,904,908],{"className":905,"code":906,"language":907,"meta":47,"style":47},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n  \"rules\": {\n    \"eqeqeq\": [\"error\", \"always\"]\n  }\n}\n","json",[25,909,910,915,933,966,971],{"__ignoreMap":47},[51,911,912],{"class":53,"line":54},[51,913,914],{"class":122},"{\n",[51,916,917,921,925,927,930],{"class":53,"line":73},[51,918,920],{"class":919},"sqvqQ","  \"",[51,922,924],{"class":923},"sz8Xr","rules",[51,926,86],{"class":919},[51,928,929],{"class":122},":",[51,931,932],{"class":122}," {\n",[51,934,935,938,940,942,944,947,949,952,954,956,958,961,963],{"class":53,"line":92},[51,936,937],{"class":919},"    \"",[51,939,36],{"class":923},[51,941,86],{"class":919},[51,943,929],{"class":122},[51,945,946],{"class":122}," [",[51,948,86],{"class":65},[51,950,951],{"class":83},"error",[51,953,86],{"class":65},[51,955,699],{"class":122},[51,957,80],{"class":65},[51,959,960],{"class":83},"always",[51,962,86],{"class":65},[51,964,965],{"class":122},"]\n",[51,967,968],{"class":53,"line":106},[51,969,970],{"class":122},"  }\n",[51,972,973],{"class":53,"line":119},[51,974,975],{"class":122},"}\n",[18,977,978,981,982,985,986,988,989,992,993,268,995,997],{},[25,979,980],{},"\"always\""," は例外なし全面禁止。",[25,983,984],{},"\"smart\""," にすると ",[25,987,136],{}," との比較だけは例外扱いになる（",[25,990,991],{},"x == null"," で ",[25,994,136],{},[25,996,536],{}," を両方判定）。コードベースの方針による。",[18,999,1000,1001,1004],{},"TypeScript 環境なら ",[25,1002,1003],{},"@typescript-eslint/eqeqeq"," でも同じことができる。",[261,1006],{},[14,1008,1010],{"id":1009},"typescript-ではほぼ無関係","TypeScript ではほぼ無関係？",[18,1012,1013,1014,1016,1017,1019,1020,29],{},"TypeScript では型が一致しない値同士の ",[25,1015,32],{}," 比較がコンパイルエラーになるため、",[25,1018,32],{}," で型強制に頼ろうとするとそもそもビルドが通らない。",[22,1021,1022,1023,1025],{},"TypeScript なら ",[25,1024,27],{}," 一択",[42,1027,1031],{"className":1028,"code":1029,"language":1030,"meta":47,"style":47},"language-typescript shiki shiki-themes vitesse-light vitesse-light","const x: string = \"1\"\nconst y: number = 1\n\nx == y   // TS Error: This comparison appears to be unintentional\nx === y  // TS Error: 同じく\n","typescript",[25,1032,1033,1057,1074,1078,1090],{"__ignoreMap":47},[51,1034,1035,1038,1041,1044,1048,1050,1052,1054],{"class":53,"line":54},[51,1036,1037],{"class":61},"const ",[51,1039,1040],{"class":797},"x",[51,1042,1043],{"class":122},": ",[51,1045,1047],{"class":1046},"sSkh3","string",[51,1049,873],{"class":122},[51,1051,80],{"class":65},[51,1053,152],{"class":83},[51,1055,1056],{"class":65},"\"\n",[51,1058,1059,1061,1064,1066,1069,1071],{"class":53,"line":73},[51,1060,1037],{"class":61},[51,1062,1063],{"class":797},"y",[51,1065,1043],{"class":122},[51,1067,1068],{"class":1046},"number",[51,1070,873],{"class":122},[51,1072,1073],{"class":57}," 1\n",[51,1075,1076],{"class":53,"line":92},[51,1077,169],{"emptyLinePlaceholder":168},[51,1079,1080,1082,1084,1087],{"class":53,"line":106},[51,1081,1040],{"class":797},[51,1083,62],{"class":61},[51,1085,1086],{"class":797}," y",[51,1088,1089],{"class":69},"   // TS Error: This comparison appears to be unintentional\n",[51,1091,1092,1094,1096,1098],{"class":53,"line":119},[51,1093,1040],{"class":797},[51,1095,177],{"class":61},[51,1097,1086],{"class":797},[51,1099,1100],{"class":69},"  // TS Error: 同じく\n",[18,1102,1103,1104,614,1107,1110,1111,1113],{},"ただし、",[25,1105,1106],{},"unknown",[25,1108,1109],{},"any"," 型と比較する場合は型チェックを抜けるため、TypeScript でも ",[25,1112,36],{}," ルールを併用しておくと安全。",[261,1115],{},[14,1117,1118],{"id":1118},"まとめ",[273,1120,1121,1129,1134,1144,1152],{},[276,1122,1123,1125,1126],{},[25,1124,27],{}," は型と値の両方を比較。",[22,1127,1128],{},"ほぼ全てのケースで === を使う",[276,1130,1131,1133],{},[25,1132,32],{}," は型が違うと片方を変換するため、空文字 == 0、null == undefined のような直感に反する結果が出る",[276,1135,1136,1137,1139,1140,1143],{},"配列やオブジェクトとの ",[25,1138,32],{}," 比較は特に予測不能（",[25,1141,1142],{},"[] == false"," が true）",[276,1145,1146,1147,37,1149,1151],{},"ESLint の ",[25,1148,36],{},[25,1150,32],{}," を全面禁止しておくと安全",[276,1153,1154,1155,1157,1158,1160],{},"TypeScript では型不一致の ",[25,1156,32],{}," がコンパイルエラーになるため、自然に ",[25,1159,27],{}," を使うことになる",[261,1162],{},[14,1164,1165],{"id":1165},"関連リンク",[273,1167,1168,1178,1185,1192],{},[276,1169,1170],{},[336,1171,1177],{"href":1172,"target":1173,"rel":1174},"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality","_blank",[1175,1176],"noopener","noreferrer","MDN: 厳密等価演算子 (===)",[276,1179,1180],{},[336,1181,1184],{"href":1182,"target":1173,"rel":1183},"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Equality",[1175,1176],"MDN: 等価演算子 (==)",[276,1186,1187],{},[336,1188,1191],{"href":1189,"target":1173,"rel":1190},"https://tc39.es/ecma262/#sec-abstract-equality-comparison",[1175,1176],"ECMAScript 仕様: Abstract Equality Comparison",[276,1193,1194],{},[336,1195,1198],{"href":1196,"target":1173,"rel":1197},"https://eslint.org/docs/latest/rules/eqeqeq",[1175,1176],"ESLint: eqeqeq ルール",[14,1200,1201],{"id":1201},"関連記事",[273,1203,1204,1210],{},[276,1205,1206],{},[336,1207,1209],{"href":1208},"/number-isfinite-explained","Number.isFinite と isFinite の違い",[276,1211,1212],{},[336,1213,1215],{"href":1214},"/iife-immediately-invoked-function-expression","IIFE（即時実行関数式）とは何か",[1217,1218,1219],"style",{},"html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}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 .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}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}html pre.shiki code .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}",{"title":47,"searchDepth":73,"depth":73,"links":1221},[1222,1223,1225,1230,1232,1234,1235,1236,1237],{"id":16,"depth":73,"text":16},{"id":265,"depth":73,"text":1224},"=== と == の違いを一行で",{"id":412,"depth":73,"text":412,"children":1226},[1227,1228,1229],{"id":416,"depth":92,"text":417},{"id":502,"depth":92,"text":503},{"id":621,"depth":92,"text":622},{"id":757,"depth":73,"text":1231},"どんな時でも === で問題ないか",{"id":889,"depth":73,"text":1233},"ESLint で == を禁止する",{"id":1009,"depth":73,"text":1010},{"id":1118,"depth":73,"text":1118},{"id":1165,"depth":73,"text":1165},{"id":1201,"depth":73,"text":1201},"dev","JavaScript の === と == の挙動の違いを、型強制テーブルと実コード例で整理する。null と undefined の比較、空文字と 0 の比較、配列との比較など、== が落とし穴になる典型パターンを網羅。","md",{},"/strict-equality-vs-loose-equality",null,false,"2026-06-09T00:00:00.000Z",{"title":5,"description":1239},"2026-06/2026-06-09/strict-equality-vs-loose-equality",[1249,1250,1251,1252,1253],"JavaScript","厳密等価演算子","型強制","TypeScript","ESLint","VzuX4XmvYbDVnu92xRsogIDVN-DxLTsFvL3rY5R-9mw",[1256,1263,1271,1281,1292],{"title":1257,"description":1258,"path":1208,"tags":1259,"publishedAt":1245,"updatedAt":1243},"Number.isFinite と isFinite の違い ― JavaScript で「有限の数か」を判定する正しい書き方","JavaScript の Number.isFinite と global の isFinite は名前が似ているが挙動が全く違う。isFinite('123') が true になるのに対し Number.isFinite('123') が false になる理由を、型強制の挙動と実用例で整理する。",[1249,1260,1261,1262,1252],"Number","isFinite","型判定",{"title":1264,"description":1265,"path":1214,"tags":1266,"publishedAt":1245,"updatedAt":1243},"IIFE（即時実行関数式）とは何か ― なぜ昔は使われ、今ES Modules時代に減ったのか","Immediately Invoked Function Expression（IIFE、即時実行関数式）の構文・歴史的背景・使われなくなった理由を整理する。jQuery プラグインやレガシーコードで頻出する `(function(){})()` の意味と、ES Modules 時代の代替パターン。",[1249,1267,1268,1269,1270],"IIFE","スコープ","ES Modules","レガシーコード",{"title":1272,"description":1273,"path":1274,"tags":1275,"publishedAt":1280,"updatedAt":1243},"旅行ページの『参加者』をSingle Source of Truthへ寄せたリファクタ","家族旅行アーカイブで、frontmatterの手入力membersとfamily.tsの二重管理を解消。参加者をfamily由来に一本化し、スキーマをparticipantsへ置き換えた記録。","/trip-family-members-ssot-refactor",[1276,1277,1278,1279,1252],"リファクタリング","Astro","Single Source of Truth","スキーマ設計","2026-05-29T00:00:00.000Z",{"title":1282,"description":1283,"path":1284,"tags":1285,"publishedAt":1291,"updatedAt":1243},"eurekapu-nuxt4 全77ページ2カラム化 + Part 2 投資判断クイズ + 教科書 CH8-12 実装","投資判断クイズ18ページの動作確認から始まり、TS型エラー62件をsed一括置換で0に潰し、77ページを2カラム化、Part 2 教科書 CH8-12 をサブエージェント並列で派遣して仕上げた1日","/eurekapu-2col-and-part2-textbook",[1286,1287,1030,1288,1289,1290],"eurekapu-nuxt4","vue3","claude-code","subagent","refactoring","2026-05-15T00:00:00.000Z",{"title":1293,"description":1294,"path":1295,"tags":1296,"publishedAt":1302,"updatedAt":1243},"2026年5月11日の開発日記 - 簿記3級スライド1286枚R2移行と47枚のSVG図解作成","簿記3級スライド1286枚をWPブロック事故を経由してCloudflare R2へ全移行、決算書教材から47枚のSVG図解作成、奥付抽出はOpusで精度逆転、no-dynamic-delete Phase 2完了で1日が終わった。","/2026-05-11-diary",[1297,1298,1299,1253,1300,1301],"日記","Cloudflare R2","SVG図解","Codex","蔵書管理","2026-05-11T00:00:00.000Z",[],"https://log.eurekapu.com/og/blog/strict-equality-vs-loose-equality.png?v=2026-06-09T00%3A00%3A00.000Z&title=%E5%8E%B3%E5%AF%86%E7%AD%89%E4%BE%A1%E6%BC%94%E7%AE%97%E5%AD%90%EF%BC%88%3D%3D%3D%EF%BC%89%E3%81%A8%E7%AD%89%E4%BE%A1%E6%BC%94%E7%AE%97%E5%AD%90%EF%BC%88%3D%3D%EF%BC%89%E3%81%AE%E9%81%95%E3%81%84%20%E2%80%95%20JavaScript%20%E3%81%A7%20%3D%3D%20%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E6%96%B9%E3%81%8C%E3%81%84%E3%81%84%E7%90%86%E7%94%B1&author=Kei%20Komatsu&sig=4c14facb797beaea",1781076213878]