挖掘我的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作为一种语言的速度。 (例如,我刚刚学习了协议,因为这个。奇怪/有趣的概念。)
那是有效的,如果有的话,究竟是做什么的?
我的猜测是以下的简写,说&#39;如果&#39; b&#39;没有设置,将其设置为&#39;
if(!b)
{
b = a;
}
也可以写成
if(!b) b = a;
我认为更清楚。但同样,我猜测这实际意味着什么/做了什么。可能是错的。
这两个if条件是否相等?
if(!b){ ... }
if(b == undefined){ ... }
我想知道是否存在“未定义”和“未定义”之间的并发症。以及定义的值&#39; null&#39;
答案 0 :(得分:4)
更好的写作方式
b = b || a;
答案 1 :(得分:2)
这意味着:
b = b ? b : a; //or
b = b || a;
答案 2 :(得分:2)
这是简写
if (!b) { b = a }
让我们分解:
在||
的左侧,它正在声明b
http://james.padolsey.com/javascript/truthy-falsey/
如果b
真实,那么||
右侧的部分将不会被评估。如果b
为假,那么b将被赋予a
的值/引用。
答案 3 :(得分:1)
如果通过b
运算符未定义a
,则基本上将b
的值设置为||
,该运算符可用作a null-coalescing operator in 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条件是否相等?
if(!b){...}
if(b == undefined){...}
我想知道是否有并发症 'undefined'和定义的'null'之间的值
是的,与空字符串相比可能存在差异,这会产生以下结果:
var b = '';
!b // true
b == undefined // false
区分null
和undefined
值可能会非常棘手,因为它有点超出了这个问题的范围,您可以考虑签出this related discussion on the topic,这通常建议使用{ {1}}而不是对if(b == null) { b = a; }
。