2

我想知道是否有办法在 Javascript 的序列表达式中声明局部变量。我想将变量声明为序列表达式的一部分,而不是单独的语句。
例如,我想做这样的事情
temp = "1", var a, ++i;
谢谢你们的帮助!

编辑 - 我正在尝试检测 Javascript(以找出潜在的基于 DOM 的 XSS),上面的代码只是实际程序的一个片段。例如,我找到了一种使用三元运算符将 if 语句转换为表达式的方法,例如 if (a === 2) {a = 1} else {a = 3} is convert to a === 2? a = 1:a = 3;我想知道 var a = 2 是否也可以转换为表达式,以便可以将其添加到序列表达式
中至于我为什么要做这一切-我将 JS 程序中的赋值语句替换为一组语句我自己的。如果我添加多个语句代替单个语句,它会与其余代码混淆。因此我使用序列表达式来解决这个问题。
例如,在 for (var i = 0; i < 2; i++) {} 这样的 for 循环中,我不能用一堆分号分隔的语句替换 i =0。因此,我尝试使用序列运算符添加多个语句

4

5 回答 5

1

也许你是这个意思?

var temp="1",a,i=i+1;

我认为您不能在语法上以任何其他方式使用“var”。

于 2013-06-25T06:20:12.113 回答
1

实际上,您必须以var关键字开头,然后是声明和半列。然后你就可以开始你的序列了。

如果您真的不喜欢它或不想使用半列(无论出于何种原因),您可以尝试创建匿名函数并将参数用作局部变量:

(function(temp, a, i){ i=a, i++ })("1", 1)

因此,在 for 循环中,您可以执行以下操作:

for (var i=function(){ /* any statement you want */; return 0 }(); i<10; i++) { /* ... */ }

希望有帮助。

于 2013-06-25T06:43:27.150 回答
1
var temp="1", a , i=0;
++i;

是一种干净的方法

于 2013-06-25T06:11:39.880 回答
1

我仍然觉得你的问题没有任何意义,但这有什么问题:

var a, i = 1, temp = "1"

如果增加您刚刚声明的变量没有意义,则在可能的情况下,该值始终为 1 (假设默认值为 0 )

如果你必须增加你可以这样做

var a, i = 1, temp = "1", i = i + 1

仍然没有多大意义硬...

于 2013-06-25T06:19:21.413 回答
0

显然您希望将语句var a = this.b更改为如下内容:

var a = this.b;
var lhs = a;
var rhs = this.b;
if(rhs == 1){
}; 
lhs = rhs;

为此,您可以编写一个单独的函数:

function xy(){
    var a = this.b;
    var lhs = a;
    var rhs = this.b;
    if(rhs == 1){
    }; 
    lhs = rhs;
    return a;
}

要在 for 循环中完成这项工作,在一行中,您可以将其转换为:

for (var lhs, rhs, a = (function(){var a = this.b; lhs = a; rhs = this.b; if(rhs == 1){} lhs = rhs; return a;}).apply(this, []); a < 10; a++)

基本上应该做到这一点。该apply方法保证this函数内部与函数外部相同this

于 2013-06-25T07:28:06.627 回答