在javascript序列表达式中声明变量

时间:2013-06-25 06:07:46

标签: javascript

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

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

添加多个语句

5 个答案:

答案 0 :(得分:1)

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

是一种干净的方式

答案 1 :(得分:1)

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

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

如果增加一个刚刚声明的变量没有意义,那么如果可能的话,该值总是为1(假设默认值为0)

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

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

仍然没有多大意义的坚韧......

答案 2 :(得分:1)

也许你的意思是这个?

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

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

答案 3 :(得分: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++) { /* ... */ }

希望有所帮助。

答案 4 :(得分: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相同。