在我的案例中使用或在javascript对象 问题1

在我的案例中使用或在javascript对象 问题1,javascript,jquery,Javascript,Jquery,options.left=options.left | | | u KSM.drawOption.left是什么意思?我知道|KSM.drawOption引用的对象也是一个函数,但是| |操作符在这里是如何工作的?这是否意味着如果_KMS.drawOption.left未索引,请将options.left指定给options.left 问题2 为什么作者没有在这个案例中使用这个关键词?我想这是因为在这个演示中,他没有创建实例,因为他只调用了一次。对吗?我在jquery插件中看到了很多这方面的内容

options.left=options.left | | | u KSM.drawOption.left是什么意思?我知道|KSM.drawOption引用的对象也是一个函数,但是| |操作符在这里是如何工作的?这是否意味着如果_KMS.drawOption.left未索引,请将options.left指定给options.left

问题2 为什么作者没有在这个案例中使用这个关键词?我想这是因为在这个演示中,他没有创建实例,因为他只调用了一次。对吗?我在jquery插件中看到了很多这方面的内容,这就是为什么当作者在函数中调用函数名而不是函数名时,我会感到困惑的原因 这是一种为变量设置默认值的方法。它实际上计算左侧,如果是,变量将等于右侧,即使它也是falsy

这是一种分配默认变量的糟糕方法,尤其是在处理整数时。0被视为falsy,因此您永远无法将0指定为左属性。相反,它将始终是_KMS.drawOption的默认参数

问题2
我们没有完整的代码,所以只能假设。但我的假设是draw是一个事件,一个与addEventListener绑定的函数。这意味着该值是事件目标的上下文。我猜是画布。

JavaScript中的逻辑运算符的工作方式与大多数人预期的略有不同

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

因此,它不是返回布尔值的表达式,而是返回第一个不为false的值。这样做的好处是,在未定义、null、0或空字符串的情况下,可以很好地填充默认值

var myObj = { name: 'Josh' };

myObj.age = myObj.age || 33;
如果可以将expr1转换为false,则返回expr1;否则,返回 expr2。因此,当与布尔值一起使用时,&&返回true(如果两者都是) 操作数为真;否则,返回false

基本上恰恰相反。由于任何计算结果为false的表达式都会使逻辑检查短路,因此在尝试使用字段之前,测试字段是否存在非常有用

var myObj = null;

if(myObj && myObj.person && myObj.person.name === "Josh") // false, no error

var myObj = {};

if(myObj && myObj.person && myObj.person.name === "Josh") // false, no error

var myObj = {person: {}};

if(myObj && myObj.person && myObj.person.name === "Josh") // false, no error

var myObj = {person: {name: "Josh"}};

if(myObj && myObj.person && myObj.person.name === "Josh") // true
然而!此处应注意,因为在布尔值为true或false以及整数值为0或任何非0的情况下,您可能最终会覆盖合法值


问题2:上下文不足

请将代码张贴在此处,而不是在屏幕截图中。@Eun这是一个视频,我没有代码。然后从屏幕截图中手动键入代码。请每个帖子只问一个问题。这意味着如果options.left是falsy未定义的,0,false。。。然后改用_KMS.drawOption.left。如果选项未传递left,则默认值为_KMS.drawOption.left。换句话说,如果options.left为null,即未指定,则使用_KMS.drawOption.left中的默认值。作者调用类似于KSM.draw的函数。。