options.left = options.left || _KSM.drawOption.left
的含义是什么?我知道_KSM.drawOption
指的是对象(也是一个函数),但||
运算符如何在这里工作?如果_KMS.drawOption.left
未定,是否意味着将options.left
分配给options.left
?
为什么作者在这种情况下没有使用this
关键字?我认为这是因为在这个演示中他没有创建一个实例,因为他只做了一次调用。 Rigtht? (我在jquery插件中看到了很多this
这就是为什么当作者在一个函数中调用函数名而不是函数时我就会被使用了)
答案 0 :(得分:0)
这是一种为变量设置默认值的方法。它实际上是评估左侧,如果它是falsy,变量将等于右侧(即使它也是假的)。
这是分配默认变量的一种不好的方法,尤其是在使用整数时。 0
被视为虚假,因此您永远无法将0
指定为左侧属性。相反,它始终是_KMS.drawOption
的默认参数。
我们没有完整的代码,所以我们只能假设。但我的假设是draw
是一个事件,一个函数与addEventListener
绑定。这意味着上下文(this
值)是事件的目标。我的猜测是画布。
答案 1 :(得分:0)
JavaScript中的逻辑运算符与大多数人期望的工作方式略有不同。
如果可以转换为true,则返回expr1;否则,返回 表达式2。因此,当与布尔值一起使用时,||如果有,则返回true 操作数是真的;如果两者都为假,则返回false。
因此,不是导致布尔值的表达式,而是返回不是“falsey”的第一个值。这样做的好处是可以在未定义,null,0或空字符串的情况下填充默认值。
var myObj = { name: 'Josh' };
myObj.age = myObj.age || 33;
如果可以转换为false,则返回expr1;否则,返回 表达式2。因此,当与布尔值一起使用时,&&如果两者都返回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
或任何不是{{1}的情况下你最终可能会覆盖合法的价值。
问题2:上下文不够