直到今天,我还不知道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
}
实际代码有点动态,但这实际上是插件幕后发生的事情。由于变量名称中不允许使用短划线,但属性名称中允许使用短划线,这会导致抛出错误。
所以,对于问题:
答案 0 :(得分:3)
你必须做出异常并写下:
testObj["background-color"]
正如您可能怀疑的那样,您不能只写background-color
,因为您无法写testObj.background-color
。您还应该问一下,使用with
是否非常不合格,值得节省字符数。通常答案是" no"。