• ベストアンサー

eval() 関数の代替関数を教えてください。

eval() 関数の代替関数を教えてください。 [現在] var x = 5; var y = eval('x + 3'); // eval() 関数 console.log("y=", y); // 8 [代替] var x = 5; var y = □□□□□□□□□□ // 代替関数 console.log("y=", y); // 8

質問者が選んだベストアンサー

  • ベストアンサー
  • dakenn1
  • ベストアンサー率42% (3/7)
回答No.2

失礼しました。回答削除の方法がわからないので連投になります。 以下が正しく動作するコードです。 var x = 5; var y = new Function('x', 'return x + 3')(x); console.log("y=", y); // 8

retorofan
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

  • dakenn1
  • ベストアンサー率42% (3/7)
回答No.1

これからの時代コーディングをするならchatGPTというツールを活用したほうが良いと思います。 以下chatGPTが生成したコードです。 var x = 5; var y = Function('x + 3')(); // Function() コンストラクタを使用した代替 console.log("y=", y); // 8

関連するQ&A

  • FlashMXのeval()関数を使って数式(文字列)を評価

    FlashMXのeval()関数を使って、文字列で書かれた数式を評価することはできないでしょうか? 例えば、 var x = 0; var y = 0; var theString = "Math.cos(x) + Math.cos(y)"; var result = eval(theString); というようなスクリプトで、 result = 1 となれば成功です。 # ちなみに、このスクリプトを実行しても、resultには"Undefined"が入ります。 何故このようなことをしたいかと言いますと、 ユーザに数式を入力してもらって、その数式をグラフ化するモノを作ろうと思っているからです。 どなたか分かる方がいれば教えてください。

  • VBAのJScriptのeval()の挙動について

    VBAのコードを調べていますが、 JScriptで記述されている部分があり、 この部分でよく分からない挙動があるので教えてください。 (JSONデータをパースしているコードです) 具体的には、(実際のコードを簡略化したもの) ---------------------------------------- Sub test() Dim x As String Dim sc As Variant Dim y As String x = "{""A"":""d"",""B"":""e"",""C"":""f""}" Set sc = json_perse(x) y = sc.CodeObject.getValue("B") Debug.Print y End Sub Public Function json_perse(ByVal x As String) As Variant Dim sc As Object Set sc = CreateObject("ScriptControl") With sc .Language = "JScript" .AddCode "function getValue(){ var $tmp=''; for(var $i = 0; $i < arguments.length; $i++){ $tmp += ""['"" + arguments[$i] + ""']""; } return eval('e' + $tmp); }" .AddCode "var e = eval(" & x & ");" End With Set json_perse = sc End Function ------------------------------------------ のコードを実行すると、 getValue()の引数で指定した文字列(ここではB) の後の:の後の文字(ここではe)が返されますが、 なぜ、このようになるのかがよく分かりません。 この処理をしている部分を抽出すると ------------------------------------- function getValue(){  var $tmp='';  for(var $i = 0; $i < arguments.length; $i++){  $tmp += ""['"" + arguments[$i] + ""']"";  }  return eval('e' + $tmp); } var e = eval(" & x & "); ------------------------------------- となっていて、 eval()は、文字列として指定されたコードをJavaScriptのコードとして評価する ということですが、 eval(" & x & ")とeval('e' + $tmp)の部分が何をしているのかがよく分かりません。 なぜ、このコードを実行すると、 $tmpの文字(この場合はB)の後の:の後にある値が取得できるのでしょうか。

  • eval関数?エラーについて

    eval関数?エラーについて 掲示板の設置と設定時に各項目について必須や任意に設定できますが必須項目に無入力で投稿するとeval関数?エラーが表示されるのですが、この仕組みについて知りたいです。

    • ベストアンサー
    • Perl
  • 関数の引数とグローバル変数について

    javascript初心者です。 どうしても分からないことがあるので質問させて頂きます。 グローバル変数の値を関数で処理して増やしコンソールログに表示していく、 というようなソースがあるとします。(以下) //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 var afunc = function(){   a++;   console.log(a); } var bfunc = function(){   b++;   console.log(b); } var cfunc = function(){   c++;   console.log(c); //onclickなどで呼び出す関数 function test1(){   var aplus = new afunc(); } function test2(){   var aplus = new bfunc(); } function test3(){   var aplus = new cfunc(); } グローバル変数や関数などが3つと数が少ないならこれでもいいかも知れませんが、 これが数十個とかに増えると、ソースの量もかなり多くなり 管理も大変になると思い簡略化させたいと考えました。 そこで以下のように変えてみたのですが、 加算がうまくいきません。 //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 vvar xxfunc = function(xx){   this.xx = xx;   this.show = function() {     this.xx++;     console.log(this.xx);   } } //onclickなどで呼び出す関数 function test1(){   var aplus = new xxfunc(a);   aplus.show(); } function test2(){   var aplus = new xxfunc(b);   aplus.show(); } function test3(){   var aplus = new xxfunc(c);   aplus.show(); } もしかすると、関数の引数にはグローバル変数を指定することができないのでしょうか? 何かうまいやり方はあるでしょうか? プログラミング自体が勉強し始めたばかりなので、 おかしなソースの書き方をしているかもしれませんのが、 ご教授、よろしくお願いいたします。

  • y=5^x という関数について4次導関数まで求めたいのですが、

    y=5^x という関数について4次導関数まで求めたいのですが、 1回微分:y'=5^x*log5 2回微分:y''=5^x*log5^2+5^x/5 3回目以降の微分で、5^x/5というのをどう微分したらよいのか分かりません。 y''''はどんな関数になるのでしょうか? 解説よろしくお願いします

  • 最後に()が付いていない内側の関数を外から呼ぶ方法

    下記状態の時、obj内容を一切変更することなく、console.log("a")を実行することは出来ない、という理解で合っているでしょうか? ・最後に()演算子がないので、内側のgoo関数を実行することが出来ない ・外側のportalで、内側のgoo関数を呼び出していれば実行できるがその記述もない この場合、gooのvarは全く意味がない? var obj = {  portal : function() {   var goo = function(){    console.log("a");   }  } } var obj = {  portal : function() {   goo = function(){    console.log("a");   }  } } ・obj.portal().goo() … × ・(obj.portal()).goo() … ×

  • 対数関数のグラフの描き方

    ※logのあとの[]は、底を表しています! たとえば、y=log[2]x だったら、y=2のx乗(指数関数)の逆関数をとると考えて、 まずは、指数関数のグラフを書き、y=xに対象なぐらふを 書いているのです。 値をとるのも難しそうですし。 なにかよい方法ありますでしょうか? この方法でやると、  y=log[2](1-x) y=log[1/2](-x) y=log[2]4x などを描こうとすると詰まってしまうのですが。 むしろ描き方が分かりませんってかんじです。 お願いします!!

  • 関数を呼んだら、その中の関数も自動実行される?

    ・関数の実行タイミングが分からないので教えてください ・下記で、どうして引数が渡るのでしょうか? ・portal関数を呼んだら、gooプロパティに無名関数が格納される(?)と思うのですが、=関数実行になるのでしょうか? ・無名関数だから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);  } } obj.portal("あ"); ・自分的には、portal関数を呼んで変数gooに無名関数を格納(?)した後、明示的にgoo();と呼ぶ必要があると思うのですが… ・下記でTypeErrorエラーになるのは、gooプロパティが2回呼ばれるから? ・明示的に呼んだ2回目は引数が渡らないから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);   goo();  } } obj.portal("あ"); //TypeError: undefined is not a function

  • 即時関数でプライベート変数的になってる理由を教えて

    即時関数内で、プライベート変数的な動きになっている(?)コードがあるのですが、呼び出せない理由を教えてください ・呼び出せる例1 (function() {  hoge2 = 'ホゲ2'; })() console.log(hoge2); ・呼び出せる例2 (function() {  var hoge1 = {};  hoge2 = 'ホゲ2'; })() console.log(hoge2); ・呼び出せない例 (function() {  var hoge1 = {},hoge2 = 'ホゲ2'; })() console.log(hoge2); ■質問1 ・どうして呼び出せないのでしょうか? ・varでローカル宣言(?)してるhoge1オブジェクトに紐づいているから? ・つまり、hoge2オブジェクトを生成している場所が違う? ■質問2 ・呼び出せない状態の時、hoge2はプライベート変数になっているのでしょうか? ■質問3 ・そもそもどうして呼び出せるのでしょうか? ・即時関数は(名前もしくはスコープ)空間を作り閉じ込めるので~、という記述を、どこかで見かけたような気もするのですが…

  • 関数を教えて下さい

    関数y=1/2(log2(x)^2)^2+9log1/2(x)+9がある。 (1)t=log2(x)とおくとき、log1/2(x)をtを用いて表せ。また、yをtを用いて表せ。 log1/2(x)=-t y=2t^2-9t+9です。 (2)不等式y≦0を満たすxの値の範囲を求めよ。 (3)(2)の範囲において、方程式1/2(log2(x)^2)^2+9log1/2(x)+9=a-log2(x)(aは定数)が異なる2つの実数解をもつとき、aの取り得る値の範囲を求めよ。 解答と解説をよろしくお願いします。

専門家に質問してみよう