方法:运算符在Javascript中工作

Ale*_*nov 3 javascript

为什么下一个代码不会出现错误?

var bar = 1,
    foo = {};

foo: {
    bar: 2;
    baz: ++bar;
};
Run Code Online (Sandbox Code Playgroud)

它回来了 2

它知道javascript有标签,它有助于管理循环和if语句.这段代码可以用吗?我看到带有::运算符的AngularJS框架提供了一次性绑定.也许你听到另一个使用那个奇怪的算子的例子.

T.J*_*der 6

这不是错误,因为fooin foo: {...}是一个语句标签.它与你的foo变量无关,它与任何东西都没有任何关系.

类似地,{和}定义一个块,而不是一个对象,并且bar和baz内部也语句标签.

声明

2;
Run Code Online (Sandbox Code Playgroud)

和

++bar;
Run Code Online (Sandbox Code Playgroud)

完全有效.第一个看起来有点奇怪,但它是有效的; 在JavaScript中,任何表达式都可以用作语句,包括一个简单的常量.(这很有用;这是JavaScript在"use strict"指令中滑落的方式.)

结果是2因为块获取块中最后一个语句的值,即++bar;.

除非某些东西使用这些语句标签,否则该代码相当于:

var bar = 1,
    foo = {};

2;
++bar;
Run Code Online (Sandbox Code Playgroud)

这段代码可以用吗?

纯粹是给定的,我不知道如何,不.但是请注意,如果你在foo块中有一个循环,并且你在循环之后有了一些东西,你可以使用一个定向中断跳过循环之后的东西:

var bar = 1,
  foo = {};

foo: {
  bar: 2;
  baz: ++bar;
  for (var n = 0; n < 10; ++n) {
    snippet.log("n = " + n);
    if (Math.random() < 0.3) {
      break foo;
    }
  }
  snippet.log("Probably don't get here");
};
snippet.log("Done");
Run Code Online (Sandbox Code Playgroud)
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Run Code Online (Sandbox Code Playgroud)

在那里,你不会看到Probably don't get here除了在外围的情况下连续Math.random()返回少于0.3十次的值.

但是,你需要一个循环或者switch为了做到这一点; break仅在循环中有效switch.做一件非常不寻常的事......

  • 并且`++ bar;`计算结果为2,这就是包含块`{}`的计算结果,(即它的最后一个语句.),这就是为什么它返回'2`. (4认同)

归档时间:

查看次数:

113 次

最近记录:

11 年,5 月 前