直到今天,我還不知道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噢!我沒有想到這個問題,很好的捕捉。 –