如上图,第2行和第3行是什么意思
逻辑或有点类似与默认参数,但是较默认参数更为宽松。
上述代码的意思为:
当 nodes[link.source]有值时将其赋给 link.source,不继续执行||后面的代码;
当nodes[link.source]没有值时,将{name: link.source}先赋值给nodes[link.source],再将nodes[link.source]赋值给link.source。始终保证link.source可以取到相应的值。
这个是一个逻辑运算符 ,表示 逻辑或
,即其前后两边的逻辑判断 除非全部为假
,否则都返回真
。其对应真值表为
A判断 || B判断 输出
0 0 0
1 0 1
0 1 1
1 1 1
其中0
表示假
,1
表示真
。
具体到你提供的程序,这里利用了或
逻辑运算的一个特性,就是前面为假
就执行后面语句,前面为真
就不执行后面语句。
其中第2句等效于
当 nodes[link.source]
有值且不为0
、false
、‘’
(空字符串)等逻辑假
值时将其赋给 link.source
,不继续执行||
后面的代码;
当nodes[link.source]
没有值或者值为0
、false
、‘0’
时,将{name: link.source}
先赋值给nodes[link.source]
,再将nodes[link.source]
赋值给link.source
。始终保证link.source
可以取到相应的值。
后面的第3句类似,只是值的位置不同而已。
9 回答10.2k 阅读
4 回答8.6k 阅读✓ 已解决
7 回答10.7k 阅读
2 回答11.2k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答4.2k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
||
表示逻辑或,会尝试将符号左侧转换为Boolean
对象,如果左侧为true
则表达式结果为左侧值,如果为false
,则表达式结果为右侧值。在ES5的年代,这种写法多用于处理默认值。
结合截图来说:如果
nodes[link.source]
为空false
,则给nodes[link.source]
赋值为一个Object
,并将其返回。如果
nodes[link.source]
不为空false
,则直接返回nodes[link.source]
P.S. 上边所说的
false
不是真正意义上的Boolean false,而是所有可以转换为false
的值,包含null
、undefined
、0
之类的