質問: 'text' + getNum; if(typeof eval(setText) !== 'undefined'){ console.log(eval(setText)); } else { console.log('なし'); } ```
回答: 知りたいのは「理由」でしょうか。 > > なにが間違っているのでしょうか?宜しくお願いします。 > > > `typeof 未定義識別子` は確かにエラーを出しません。 しかし `typeof eval(未定義識別子)`もエラーを出さないだろう、 というのは単なる思い込みで、 実際は、typeofより先に評価されるeval関数の中でエラーが発生してしまい typeof にまで行かないで終わってしまう、ということでしょう。 === > > 例えば5の値を取得した時、存在しない変数なら処理をしたいと思ったわけです。 > > eval()を入れないと式が評価されず、変数の確認が出来ないです。 > > > evalを使わないで済む方法を推奨しますし、具体例はほかの回答者さんのとおりです。 しかし、万が一、どうしても、文字列から変数の有無を確認をしたいのであれば、 先にtypeofより先にeval単体で検査すればよい、ということが、上記の理屈から分かることと思います。 ``` var text1 = 'hoge1', text2 = 'hoge2', text3 = 'hoge3'; var getNum = 5; var setText = 'text' + getNum; try{ eval(setText); }catch(error) { console.log("なし"); setText=''; } console.log(eval(setText)); ```