前者:
greeting = "hello" + (username ? username : "friend")
后者:
greeting = "hello" + (username || "friend")
下面有个回答明显对js的逻辑或操作符没有理解到位,我简单解释一下 username || "friend"
其中 username 是个标识符,可能这个变量已经定义,也可能没有定义。
逻辑或操作符的操作数可以为任意类型,并且不一定总是返回 boolean 类型,且两个操作数的值不一定全部被计算,如果左操作数为真,则直接返回左操作数的值,注意,不是返回 true,而是左操作数的值,也就是说 4 || 0 返回的是 4,而不是 true,这种情况下右操作数将直接被忽略。如果左操作数为假,则直接返回右操作数的值,例如 0 || "hello world" 将会返回 "hello world"
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可以从编译器性能优化的角度来看。
在诸如C、C++、java的语言里面,形如 a || b 的结构,a做真值判断结果为
true的时候,没有必要做b的真值判断,因为根据操作符“或”的定义,只要二者有一个为真即可。因此在a真值判断结果为true的时候,编译器不需要计算b的值,按相应语言标准,返回a或者true。在javascript这个语言里,“或”操作符并不一定返回boolean类型的值。上面的编译优化方式依然成立的,对于形如
a || b的结构,编译器有以下的步骤:false、0、""(即空字符串),null,undefined,NaN之一的时候)false || b表达式的值,直接返回b正因此,这两段js的写法完全等价。
更多类似的js写法,还有:
等同于
功能上一致
如果要实现同样的功能,后者更精炼.一般都会这么写.
前面那种使用场景一般是:
你可以用浏览器自带的debugger查看一下,应该是一样的
不一样!!!!!
等价的。上面那种写法其实也就是逻辑或运算。
等价的 ,只是两种不同的写法