数组行为混乱

Rav*_*ari 8 javascript

在编码测试中,我最近遇到一个问题,要求我找出将在控制台中打印的内容.问题如下.我不明白下面的代码将如何被理解和执行.

需要帮忙

var arr = ["a" , "b" , "c" , "d"][1,2,3];
console.log(arr);
Run Code Online (Sandbox Code Playgroud)

这个定义甚至意味着什么?

moh*_*ias 13

JS中的数组是一维的.

所以 var arr = ["a" , "b" , "c" , "d"][1,2,3];

这里[1,2,3]代表索引.

逗号是前面最少的运算符,所以[1,2,3]会返回你3(即总是最右边的元素).

因此

结果将返回索引值3d

Update:
Run Code Online (Sandbox Code Playgroud)

让我们看一下comma运营商的更多要点:

来自MDN:

逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值.

所以,这意味着:

var a = (10, 18);
a; //18
Run Code Online (Sandbox Code Playgroud)

另请注意,在分配给变量时,必须在括号内提及它们.

如果你尝试这样的事情:

var a = 1,2,3;
a; // will return 1
Run Code Online (Sandbox Code Playgroud)

因此,使用它们进行包装非常重要().

你何时会使用它,

如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符.此运算符的最常见用法是在for循环中提供多个参数.

for (var i = 0, j = 9; i <= 9; i++, j--)
Run Code Online (Sandbox Code Playgroud)

既然您已经了解了comma运算符,那么让我们看一些例子来测试我们的理解:

1.  var a = (1,3)/(2,1);
    a // what will be the o/p

2.  var a = ["Stack", "OverFlow","is","Awesome"][1,3,2][2,0]
    a // What will be the o/p

3.  var a = (true,0,1), b, c;
    if(b,c,a) {
        console.log("Will it execute?");
    }
Run Code Online (Sandbox Code Playgroud)

  • 正确.OP,至少看起来不像这样:`var wtf ="test"[1,2,3];`这可能更令人困惑;) (2认同)
  • 太棒了!我今天学了些新东西.我不知道逗号令牌在之前的语言中有特殊含义.谢谢 (2认同)

cdo*_*orn 5

你的例子让我措手不及.这是另一个说明正在发生的事情的例子.基本上,逗号分隔值列表的计算结果为最后一个值.

if (false, false, true) {
    console.log("hello")
} 
// --> "hello"
Run Code Online (Sandbox Code Playgroud)