var x,y ='foo'; 这可以实现吗?

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)

  • +1谁没有评论就投票了?这实际上是尚未提及的有效替代方案.在这种情况下,"x"和"y"都是局部变量. (4认同)

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为了简洁起见,正确应用局部变量并不省略它是一个好习惯.

  • @ RoccoC5不,我的解决方案中的赋值是:var x ='foo',y = x; 这是完全不同的.有两个赋值使用一个文字值.如果我能说得更清楚,请告诉我. (3认同)

Fla*_*ino 7

你可以做

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)


cwa*_*ole 5

为了使其工作,您需要单独初始化它们(如第一个示例),或者您需要在单独的语句中设置它们.

// 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)


Pau*_*aul 5

以下是我的测试功能.污染功能中当前未注释的行可以满足您的需求.您可以在这里尝试它和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)