Javascript Websocket将代码传递给Eval

Javascript Websocket将代码传递给Eval,javascript,websocket,Javascript,Websocket,我有一个javascript对象,作为原始文本通过websocket传递给客户端。这个原始文本(目前)在收到时直接传递到eval语句中。问题是,出于某种原因,Javascript在将数据传递给事件处理程序之前一直在操作数据。我束手无策 通过websocket传递的对象是: var obj = { evaluate:function(str) { digit = parseInt(str,10); if(isNaN(digit)) {

我有一个javascript对象,作为原始文本通过websocket传递给客户端。这个原始文本(目前)在收到时直接传递到eval语句中。问题是,出于某种原因,Javascript在将数据传递给事件处理程序之前一直在操作数据。我束手无策

通过websocket传递的对象是:

var obj = {
    evaluate:function(str) {
        digit = parseInt(str,10);
        if(isNaN(digit)) {
            log.write("Invalid input: "+str);
        } else {
            log.write(this.spigot(digit));
        }
    },
    spigot:function(digit) {
        len = Math.floor(10*digit/3)+1;
        A = new Array(len);

        for(var i=0;i<len;i++) A[i]=2;
        var finalDigit = 0;
        var nines = 0;
        var predigit = 0;

        for(i=1;i<digit+1;i++) {
            q = 0;
            for(j=len;j>0;j--) {
                x = 10*A[j-1] + q*j;
                x = Math.floor(x)
                A[j-1] = x % ((2*j)-1);
                A[j-1] = Math.floor(A[j-1]);
                q = x / ((2*j) -1);
                q = Math.floor(q);
            }

            A[0] = Math.floor(q%10);
            q = Math.floor(q/10);

            if(q==9) {
                nines++;
            } else if (q==10) {
                finalDigit = predigit+1;
                for(j=0;j<nines;j++) {
                    finalDigit = 0;
                }
                predigit=0;
                nines=0;
            } else {
                finalDigit = predigit;
                predigit=q;
                for(j=0;j<nines;j++) {
                    finalDigit = 9;
                }
                nines=0;
            }
        }
        return finalDigit;
    }
}
e、 数据包括:

obj = {
    evaluate:function(str) {
        digit = parseInt(str,10);
        if(isNaN(digit)) {
            log.write('Invalid input: '+str);
        } else {
            log.write(this.spigot(digit));
        }
    },
    spigot:function(digit) {
        len = Math.floor(10*digit/3)+1;
        A = new Array(len);

        for(var i=0;i<len;i++) A[i]=2;
        var finalDigit = 0;
        var nines = 0;
        var predigit = 0;

        for(i=1;i<digit+1;i++) {
            q = 0;
            for(j=len;j>0;j--) {
                x = 10*A[j-1] + q*j;
                x = Math.floor(x)
                A[j-1] = x %((MISSING)(2*j)-1);
                A[j-1] = Math.floor(A[j-1]);
                q = x / ((2*j) -1);
                q = Math.floor(q);
            }

            A[0] = Math.floor(q%)(MISSING);
            q = Math.floor(q/10);

            if(q==9) {
                nines++;
            } else if (q==10) {
                finalDigit = predigit+1;
                for(j=0;j<nines;j++) {
                    finalDigit = 0;
                }
                predigit=0;
                nines=0;
            } else {
                finalDigit = predigit;
                predigit=q;
                for(j=0;j<nines;j++) {
                    finalDigit = 9;
                }
                nines=0;
            }
        }
        return finalDigit;
    }
}
obj={
评估:功能(str){
数字=parseInt(str,10);
if(isNaN(数字)){
log.write('无效输入:'+str);
}否则{
log.write(这个.插口(数字));
}
},
插口:功能(数字){
len=数学楼层(10位/3)+1;
A=新阵列(len);

对于(var i=0;i而言,
%
字符被Javascript解释为转义字符。您看到添加的
(缺少)
文本是Javascript告诉您转义字符后面没有两位转义代码的方式。解决此问题的最简单方法是定义函数
mod(a,b)
实现与模数相同的功能,即:

....},
mod:function(a,b) {
    return (a/b-Math.floor(a/b))*b;
}
然后,当您需要使用模运算符时,只需调用

Math.floor(this.mod(q,10));
Math.floor(this.mod(q,10));