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

时间:2011-08-20 04:25:26

标签: javascript jquery variables syntax

因为可以这样做:

var x = 'foo', y = 'foo';

这也可能吗?

var x, y = 'foo';

我尝试过,但x变得不确定。

我知道这似乎是一个愚蠢或多余的问题,但如果我对某些事情感到好奇,为什么不问?你也可能想知道为什么我需要两个变量等于在范围中的相同的东西。这不是问题的关键。我只是好奇。

10 个答案:

答案 0 :(得分:24)

不确定这是否是您所要求的,但如果您的意思是“我可以在一行中为同一个文字分配两个变量而不输入两次文字吗?”然后答案是肯定的:

var x = 10, y = x;

答案 1 :(得分:22)

您需要两个单独的语句才能获得完全相同的语义。

var x, y; x = y = 'foo';
// or
var x = 'foo'; var y = x;
// or
var y; var x = y = 'foo';

其他用户建议的解决方案等效,因为它不会将var应用于y。如果存在全局变量y,那么它将被覆盖。

// Overwrites global y
var x = y = 'foo';

最好将var正确应用于局部变量,而不是为了简洁而省略它。

答案 2 :(得分:7)

你可以

var x = y = 'test'; // Edit: No, don't do this

修改

我刚刚意识到这会创建/覆盖y作为全局变量,因为y不会立即以var关键字开头。所以基本上,如果它在一个函数中,你会说“局部变量x等于全局变量y等于......”。因此,您要么污染全局范围,要么为现有的全局y变量分配新值。不好。

不幸的是,你无法做到

var x = var y = 'test'; // Syntax error

所以,相反,如果你不想污染全局范围(你没有!),你可以做到

var x, y;
x = y = 'test';

答案 3 :(得分:5)

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

// This causes bugs:
var x = y = 'test';

观看:

var y = 3;
function doSomething(){ var x = y = 'test'; }
doSomething();
console.log( y ); // test !?

另一方面:

// this does not
var x,y; x = y = 'test';

观看:

var y = 3;
function doSomething(){ var x,y; x = y = 'test'; }
doSomething();
console.log( y ); // 3 -- all is right with the world.

答案 4 :(得分:5)

以下是我的测试功能。污染功能中当前未注释的行可以满足您的需求。您可以尝试使用jsfiddle here中的其他选项。

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');
}

答案 5 :(得分:4)

请注意,虽然

var x = y = 'test';

是合法的javascript

在严格的上下文中(例如本例):

function asdf() {
    'use strict';
    var x = y = 5;

    return x * y;
}
asdf();

你会得到:

ReferenceError: assignment to undeclared variable y

让它无误地运行

var x, y;
x = y = 5;

答案 6 :(得分:2)

如果要将x显式初始化为undefined并希望限制x的范围,则使用var x,y ='foo'。

function foo() {
  var x, y = 'value';
  // ...
  x = 5;
  // ...
}
// Neither x nor y is visible here.

另一方面,如果你说:

function foo() {
  var y = 'value';
  // ...
  x = 5;
  // ...
}
// y is not visible here, but x is.

希望这有帮助。

来源:http://www.mredkj.com/tutorials/reference_js_intro_ex.html

答案 7 :(得分:1)

我会避免变得棘手。由于我每个var只使用一个变量(每行一个语句),所以很容易保持简单:

var x = "hello"
var y = x

很好,简单而且没有愚蠢的问题 - 正如其他答案和评论中所讨论的那样。

快乐的编码。

答案 8 :(得分:1)

我想知道为什么没人发布,但你可以这样做

var x, y = (x = 'foo');

答案 9 :(得分:0)

你做不到

var a = b = "abc";

因为在这种情况下,b将成为全局变量。

您必须意识到声明一个没有var的变量会使其成为全局变量。所以,如果你逐一关注它会很好

 var a = "abc";
 var b = a;