什么|| 运营商呢?

Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4; 

什么|| 在这种情况下呢?
将_4添加到Attacklab.wmd_env.buttons的数组中?

|| 如果该值不计算为false ,则返回左侧的值,否则返回右侧的值。

来自Mozilla的核心JavaScript 1.5参考 :

expr1 || expr2
如果可以转换为true,则返回expr1 ; 否则,返回expr2 。 因此,当与布尔值一起使用时, || 如果任一操作数为真,则返回true; 如果两者都是错误的,则返回false。

因此,在这种情况下,如果Attacklab.wmd_env.buttons没有值,则将值设置为_4

这是一个奇特的写作方式

 if(!Attacklab.wmd_env.buttons) Attacklab.wmd_env.buttons = _4; 

提供默认值很好。 请记住,不仅nullundefined将触发条件,而且还会触发0false'' ,即在布尔上下文中被视为false所有内容。

如果Attacklab.wmd_env.buttonsnullundefined ,它将被设置为默认值_4

|| 运算符检查expression式左侧提供的值是否为false(在布尔上下文中)。 如果是这样,则返回expression式右侧所示的替代值。 否则,它将返回原始值。

所以例如下面的代码将'Foo'设置为默认值,如果它是空的:

 Foo = Foo ||  “默认值” 

这有时称为合并操作员。 它支持其他语言,如Ruby和Perl。 C#有? 运算符做相同的事情。