直到今天,我还不知道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
}
实际的代码更加动态一些,但这实际上是在插件的幕后发生的。由于破折号不允许在变量名称中,但在属性名称中允许,导致错误被引发。
所以,问题:
- 有没有一种方法来净化块范围局部变量,以避免问题与破折号,同时保持它在我的财产的名字吗?
- 有没有其他人使用环氧树脂解决了这个问题?
你最好[避免'与'altogther](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/with)。更多[这里的信息](http://stackoverflow.com/questions/61552/are-there-legitimate-uses-for-javascripts-with-statement)。 – Andy
这与'window'属性相同。你可以定义'window ['a-b'] = 4;'但不能写'console.log(a-b);'。在某些情况下,你可以写'this ['background-color']'。 – Xufox
@Xufox噢!我没有想到这个问题,很好的捕捉。 –