2
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?

A === !null と A !== null は全然違う

Posted at

はじめに

Typescript のバージョンアップをしたら、A === !null にエラーが出ていました。
軽い気持ちで、フンフンとなおしてリリースしました。
その後に、バグ報告が!
自分じゃないところかなと思っていたら、まさかの私の箇所。
反省の意味も込めて、記事書きます。

結論

A === !null と A !== null は全然違う
メロンとメロンパンぐらい違う。
蟹とかにパンぐらい違う。
理髪店と理容室くらい違う。
とにかく違う。

A === !null とは

!null は JavaScript の論理否定演算子(!)を使った表現で、null を否定した結果が true になります。

null は falsy な値であり、!null は true になります。
つまり、A === !null は A === true と同じ意味になります。
これは、「A が true と等しいか」をチェックしています。

A !== null とは

A !== null は「A が null ではない」ことを確認するための条件です。つまり、この式は A が null 以外のどんな値でも true になります。

違い

A === !null は、「A が true と等しいかどうか」を確認しています。
A !== null は、「A が null ではないかどうか」を確認しています。

実際のコード

let A = true;

console.log(A === !null);  // true  -> Aは true なので、A === true と等しい
console.log(A !== null);   // true  -> A が null ではないため true

A = null;

console.log(A === !null);  // false -> A は null なので、A === true は false
console.log(A !== null);   // false -> A は null なので false

そもそも判定するものが違いますね・・・

まとめ

まず、少しコードを変えただけと思っても、テストは必ず必要です。
今回の件もリリース前にしっかり動作確認すれば潰せたかもしれない。
テスト大事 ★

2
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
2
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?