在Javascript中,你为什么要写'b ||(b = a);'
in Javascript, why would you write 'b || (b = a);'?
挖掘我的 webGL 项目中使用的glMatrix-0.9.5.min.js
源代码,我遇到了几行这样的代码......
vec3.negate = function (a, b)
{
b || (b = a); // <-- What exactly does this line do?
b[0] = -a[0];
b[1] = -a[1];
b[2] = -a[2];
return b;
};
不确定该代码在做什么,或者即使考虑到它是第三方文件,它是否是一个错误,但我也知道我并没有完全了解 JavaScript 作为一种语言。(例如,我刚刚因此了解了协议。奇怪/有趣的概念。
那么这是否有效,如果是,它到底在做什么?
我的猜测是它是以下内容的简写,说"如果未设置'b',请将其设置为 a">
if(!b)
{
b = a;
}
也可以只是写
if(!b) b = a;
我认为这要清楚得多。 但同样,我猜测这实际上意味着/做什么。 可能是错的。
随访:
这两个如果条件相等吗?
if(!b){ ... }
if(b == undefined){ ... }
我想知道"未定义"和定义的"null"值之间是否存在复杂性
更好的写法是
b = b || a;
这意味着:
b = b ? b : a; //or
b = b || a;
这是 if (!b) { b = a }
让我们分解一下:
在||
的左边,它断言b
http://james.padolsey.com/javascript/truthy-falsey/的真实性
如果b
是真实的,则不会评估||
右侧的部分。 如果b
是假的,那么 b 将被分配 a
的值/引用。
它基本上是通过 ||
运算符将 b
的值设置为 a
,如果b
未定义,该运算符可以在 Javascript 中用作空合并运算符。
你可以用 if 语句来考虑它,如下所示:
if(b == undefined){
b = a;
}
偏好问题
归根结底,关于什么是最有意义的偏好问题,但您在此讨论中找到的任何方法都可能是有效的选项:
// Explicitly using undefined in the comparison
if(b == undefined) { b = a }
// Using an if-statement (with a not)
if(!b){ b = a }
// Using a ternary operator
b = b ? || a
关于您的跟进
追问:这两个如果条件相等吗?
if(!b({ ... }
if(b == undefined({ ... }
我想知道是否有并发症 在"未定义"和定义的"null"值之间
是的,空字符串可能会有所不同,这将产生以下结果:
var b = '';
!b // true
b == undefined // false
区分null
值和undefined
值可能很棘手,并且由于它有点超出此问题的范围,因此您可以考虑查看有关该主题的相关讨论,该讨论通常建议使用if(b == null) { b = a; }
而不是针对undefined
进行检查。
- JavaScript-为什么我可以在数组中设置键
- Javascript:为什么是构造函数's __proto__属性Empty(){}
- JavaScript:为什么Addy's观察者模式
- JavaScript - 为什么这个闭包不保存参数
- JavaScript:为什么不't将背景变化发送给用户's选择(简单)
- Javascript-为什么我的JQueryAJAX请求失败
- JavaScript:为什么这个循环的优化使它变慢了
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- JavaScript - 为什么这不起作用?我看不出有什么区别
- Javascript——为什么一个document.getElementById()有效,而另一个无效
- Javascript-为什么不是't此setTimeout函数正在工作
- HTML/JavaScript:为什么不'我的纽扣坏了
- JavaScript:为什么这个代码不;t工作
- Javascript:为什么复制值而不更改
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- JavaScript-为什么这段代码不起作用
- Javascript:为什么我把“;()“;在console.log中调用变量时在变量后面
- Javascript:为什么要使用indexOf()来匹配字符串中的值
- JavaScript:为什么boolean总是返回true
- JavaScript-为什么当我向表中添加新列时,它会说“;未定义的“;在额外的细胞中