学过 Java 和 C 的人,都知道逻辑与(&&)和逻辑或(||),他们都是短路运算符,也就是说,对于&&来说,只要左边的操作数是 false,它就不会再去判断右边的操作数是 true 还是 false 了,因为这个时候已经知道整个表达式的值就是 false 了;同理对于 || 来说,只要左边的操作数是 true,它也不会再去计算右边的操作数了。
对于 Java 和 C 而言,&&和 || 的返回值不是 true 就是 false,但是 Javascript 却不是这样的,如果你认为 Javascript 也是返回 true 或者 false 的话,请看下面的小例子:
1. 先来看看逻辑与&&
var a = false;
var b = a && true; // b=false
var a = 0;
var b = a && true; //b=0
var a = null;
var b = a && true; //b=null
2. 再来看逻辑或 ||
var a = false;
var b = a || true; // b=true
var a = 0;
var b = a || 500; //b=500
var a = null;
var b = a || "xyz"; //b="xyz"
现在我们来解释一下为什么会是怎样的:
1. Javascript 本身是弱类型的语言,也就是说一个变量的类型是不固定的,是在运行时,根据具体的变量值来决定的。
2. Javascript 中的 Boolean 值,有这样的类型转化规律:
2.1 对于数字而言,除0和NaN可以被转成false,其他的数字可以被转成true;
2.2 对于字符串而言,空字符串("")可以被转成false,非空的字符串都可以被转成true;
2.3 对于对象而言,null的对象可以被转成false,非null的对象可以被转成true;
2.4 对于null和undefined,都会被转成false。
3. 在 if 等需要 Boolean 值的上下文时,Javascript 会自动执行上一点中所提到的类型转化。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于