我想知道是否有办法在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。因此,我试图用序列运算符
答案 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
相同。