dar*_*ryl 13 javascript variables syntax jquery
既然可以这样做:
var x = 'foo', y = 'foo';
Run Code Online (Sandbox Code Playgroud)
这也有可能吗?
var x, y = 'foo';
Run Code Online (Sandbox Code Playgroud)
我尝试过,但x变得不确定.
我知道这似乎是一个愚蠢或多余的问题,但如果我对某些事情感到好奇,为什么不问?你也可能想知道为什么我需要两个变量在范围内等于相同的东西.这不是问题的关键.我只是好奇.
Phi*_*hil 24
不确定这是否是你要问的,但如果你的意思是"我可以在一行中为同一个文字分配两个变量而不输入两次文字吗?" 然后答案是肯定的:
var x = 10, y = x;
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 22
您需要两个单独的语句来获得完全相同的语义.
var x, y; x = y = 'foo';
// or
var x = 'foo'; var y = x;
// or
var y; var x = y = 'foo';
Run Code Online (Sandbox Code Playgroud)
其他用户建议的解决方案并不等同,因为它不适var
用于y
.如果有一个全局变量,y
那么它将被覆盖.
// Overwrites global y
var x = y = 'foo';
Run Code Online (Sandbox Code Playgroud)
var
为了简洁起见,正确应用局部变量并不省略它是一个好习惯.
你可以做
var x = y = 'test'; // Edit: No, don't do this
Run Code Online (Sandbox Code Playgroud)
编辑
我刚刚意识到这会创建/覆盖y
一个全局变量,因为y
它不会立即在var
关键字前面.所以基本上,如果它在一个函数中,你会说"局部变量x
等于全局变量y等于......".因此,您要么污染全局范围,要么为现有全局y
变量分配新值.不好.
不幸的是,你做不到
var x = var y = 'test'; // Syntax error
Run Code Online (Sandbox Code Playgroud)
所以,相反,如果你不想污染全局范围(你没有!),你可以这样做
var x, y;
x = y = 'test';
Run Code Online (Sandbox Code Playgroud)
为了使其工作,您需要单独初始化它们(如第一个示例),或者您需要在单独的语句中设置它们.
// This causes bugs:
var x = y = 'test';
Run Code Online (Sandbox Code Playgroud)
看:
var y = 3;
function doSomething(){ var x = y = 'test'; }
doSomething();
console.log( y ); // test !?
Run Code Online (Sandbox Code Playgroud)
另一方面:
// this does not
var x,y; x = y = 'test';
Run Code Online (Sandbox Code Playgroud)
看:
var y = 3;
function doSomething(){ var x,y; x = y = 'test'; }
doSomething();
console.log( y ); // 3 -- all is right with the world.
Run Code Online (Sandbox Code Playgroud)
以下是我的测试功能.污染功能中当前未注释的行可以满足您的需求.您可以在这里尝试它和jsfiddle中的其他选项.
var originalXValue = 'ekis';
var originalYValue = 'igriega';
var x = 'ekis';
var y = 'igriega';
function pollute()
{
// Uncomment one of the following lines to see any pollution.
// x = 'ex'; y = 'why'; // both polluted
// var x = 'ex'; y = 'why'; // y was polluted
// var x = y = 'shared-ex'; // y was polluted
var x = 'oneline', y = x; // No pollution
// var x = 'ex', y = 'ex'; // No pollution
document.write('Pollution function running with variables<br/>' +
'x: ' + x + '<br/>y: ' + y + '<br/><br/>');
}
pollute();
if (x !== originalXValue && y !== originalYValue)
{
document.write('both polluted');
}
else if (x !== originalXValue)
{
document.write('x was polluted');
}
else if (y !== originalYValue)
{
document.write('y was polluted');
}
else
{
document.write('No pollution');
}
Run Code Online (Sandbox Code Playgroud)