teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

3→5

2018/11/05 11:37

投稿

taka-saan
taka-saan

スコア665

answer CHANGED
@@ -26,7 +26,7 @@
26
26
  text2 = 'hoge2',
27
27
  text3 = 'hoge3';
28
28
 
29
- var getNum = 3;
29
+ var getNum = 5;
30
30
  var setText = 'text' + getNum;
31
31
 
32
32
  try{

1

追記

2018/11/05 11:37

投稿

taka-saan
taka-saan

スコア665

answer CHANGED
@@ -10,4 +10,31 @@
10
10
  というのは単なる思い込みで、
11
11
 
12
12
  実際は、typeofより先に評価されるeval関数の中でエラーが発生してしまい
13
- typeof にまで行かないで終わってしまう、ということでしょう。
13
+ typeof にまで行かないで終わってしまう、ということでしょう。
14
+
15
+ ===
16
+ > 例えば5の値を取得した時、存在しない変数なら処理をしたいと思ったわけです。
17
+ > eval()を入れないと式が評価されず、変数の確認が出来ないです。
18
+
19
+ evalを使わないで済む方法を推奨しますし、具体例はほかの回答者さんのとおりです。
20
+
21
+ しかし、万が一、どうしても、文字列から変数の有無を確認をしたいのであれば、
22
+ 先にtypeofより先にeval単体で検査すればよい、ということが、上記の理屈から分かることと思います。
23
+
24
+ ```javascript
25
+ var text1 = 'hoge1',
26
+ text2 = 'hoge2',
27
+ text3 = 'hoge3';
28
+
29
+ var getNum = 3;
30
+ var setText = 'text' + getNum;
31
+
32
+ try{
33
+ eval(setText);
34
+ }catch(error) {
35
+ console.log("なし");
36
+ setText='';
37
+ }
38
+
39
+ console.log(eval(setText));
40
+ ```