0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JS】数値「0」がfalsyな値として評価される

Last updated at Posted at 2025-03-21

背景
下記のようなデータがある。

const data = { success: true, linemode: 1, xmode: 0 };

それぞれ「1」、「0」のために分岐操作を作ったが、
「0」のほうはうまくいかなかった。

if (data.xmode&&data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode&&data.xmode===0) {
    console.log('xmode is 0');//実行されない
} 
console.log(data.xmode);//出力:0
if (data.xmode&&data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode&&data.xmode===0) {
    console.log('xmode is 0');//出力されない
} else{
   console.log('xmode is falsy');//出力:'xmode is falsy'
} 

原因
JSでは、0 は「falsy」として評価され、if 文の条件式で 、data.xmode&&data.xmode==0data.xmodefalsy*で後続の条件が評価されない。&&演算子によってこの条件はfalseと評価される。
*条件式で評価されると false と同じ扱いをされる値のこと

対策
①条件式を変える

const data = { success: true, linemode: 1, xmode: 0 };
console.log(data.xmode);//出力:0
if (data.xmode===1) {
    console.log('xmode is 1');
} else if (data.xmode===0) {
    console.log('xmode is 0');//出力:'xmode is 0'
} else{
   console.log('data.xmode is falsy');//実行されない
}

②数値だったデータを文字列に変える

const data = { success: true, linemode: "1", xmode: "0" };
console.log(data.xmode);//出力:0
if (data.xmode&&data.xmode==="1") {
    console.log('xmode is string 1');
} else if (data.xmode&&data.xmode==="0") {
    console.log('xmode is string 0');;//出力:'xmode is string 0'
} else{
   console.log('data.xmode is falsy');//実行されない
}
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?