2017.6.27
皆さんこんにちは!!
おにぎりちゃん二回目の登場となります!!
前回の記事を見てくださった方ありがとうございます(^o^)今回もよろしくお願いします!
さて今回は、「”undefined“の比較」についてです。
あら、私が比較について話そうと思っていたら、どんぐりちゃん達が背比べを始めましたよ!
なんて冗談は置いておいて、本題に入らせていただきます。(笑)
ECサイト作成の研修課題の中でレビュー投稿の処理を書く機会がありました。
その際にundefindを利用しようと思い、このように書くことにしました。
if(request.review != undefined){ レビューを投稿 }
レビューのコメント欄に「review」という名前をつけておきます。
このコメントがundefinedでなかった場合、”レビュー投稿”を実行という処理になります。
これで実行する・実行しないの制御ができるようになったのですが、先輩社員に見ていただいた際にこんなお話をしていただきました。
(今回も会話形式でご覧ください)
「undefinedを比較するときは気をつけなきゃいけないことがあるよ」
「この比較の仕方だとundefinedという変数と比較していることになるんだ」
「undefinedを新しく定義してしまったら中身が変わってしまうんですね…」
つまりこういうことができてしまうわけです。
undefined = 1; if(request.review != undefined){ レビューを投稿 }
“undefined”に1を入れているわけですから、”request.review”は1と比較することになります。
これでは、入力が1以外の場合は、すべてレビュー投稿がされてしまいますね…
「ではundefindと比較させたいときは一体どうすればよいのでしょうか?」
「よく使われる方法にこんなやり方があるよ」
if (typeof request.review !== "undefined"){ レビューの投稿 }
この方法はundefinedにtypeof演算子を作用させることで、undefinedを文字列が返るため比較が可能となるようです。
ちなみにtypeof演算子は色々なものを文字列で返してくれるみたいですよ
値 |
返り値 |
未定義 | “undefined“ |
文字列 | “string” |
数値 | “number” |
真偽値 | “boolean” |
null | “object” |
オブジェクト | “object“ |
配列 | “object“ |
関数 | “function” |
typeof演算子を使用する他に、こんな方法も教えていただきました。
if(!isUndefined(request.review)){ レビューの投稿 }
こちらはintra-mart独自の方法で、指定した値がundefinedかどうかを判別してくれるメソッドです。
返り値はbooleanで、undefinedであれば”true”、それ以外であれば”false”が返されます。
私は今回intra-mart独自の方法を使用させていただきました!
intra-martの環境で作っているのですから、使用しないともったいないですよね!!
今回ご紹介したのは二つだけでしたが、きっとこの他にもたくさんあるのだと思います…
ひとつの方法でできたからといって終わり!ではなく、複数の方法を試して学んだ上で業務に活かせていければと思います。