方法:运算符在Javascript中工作

时间:2015-04-20 08:37:40

标签: javascript

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

var bar = 1,
    foo = {};

foo: {
    bar: 2;
    baz: ++bar;
};

返回2

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

1 个答案:

答案 0 :(得分:6)

这不是错误,因为foo中的foo: {...}statement label。它与您的foo变量无关,它与任何事物都没有任何关系。

同样,{}定义了一个块,而不是一个对象,内部的barbaz也是语句标签。

陈述

2;

++bar;

完全有效。第一个看起来有点奇怪,但它有效;在JavaScript中,任何表达式can be used as a statement,包括一个简单的常量。 (这很有用;它是"use strict"指令中JavaScript的滑动方式。)

结果为2,因为阻止takes the value of the last statement in the block,即++bar;

除非某些内容正在使用这些语句标签,否则该代码等同于:

var bar = 1,
    foo = {};

2;
++bar;
  

这段代码可以用吗?

纯粹是给定的,我不知道如何,不。但是请注意,如果你在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");
&#13;
<!-- 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>
&#13;
&#13;
&#13;

在那里,你不会看到Probably don't get here,但在Math.random()连续十次返回小于0.3的值的边远情况除外。

为了做到这一点,你需要一个循环或switch; break is only valid in loops and switch。这将是非常不寻常的事情......