随着运营商和&对象键中的破折号

时间:2015-12-08 21:32:33

标签: javascript

直到今天,我还不知道with运算符是否存在。在调试从插件(Backbone.Epoxy)抛出的问题时,我偶然发现了它。

运算符为传递的对象上的每个属性创建块级范围。

var testObj = { "cat":true };
with (testObj) {
  console.log(cat ? "Cat!": "dog"); // Cat!
}

够简单吗?最初我认为这可能真的很酷。直到我意识到为什么我的代码抛出错误。这是从我的代码派生的一个例子。

var testObj = { "css":true, "background-color":"blue" };
with (testObj) {
  console.log(css ? background-color : ""); // throws
}

实际代码有点动态,但这实际上是插件幕后发生的事情。由于变量名称中不允许使用短划线,但属性名称中允许使用短划线,这会导致抛出错误。

所以,对于问题:

  1. 有没有办法清理块范围局部变量,以避免破折号问题,同时将其保留在我的属性名称中?
  2. 有没有其他人使用环氧树脂解决这个问题?

1 个答案:

答案 0 :(得分:3)

你必须做出异常并写下:

testObj["background-color"]

正如您可能怀疑的那样,您不能只写background-color,因为您无法写testObj.background-color。您还应该问一下,使用with是否非常不合格,值得节省字符数。通常答案是" no"。