首页 > 如何理解js中的 var a="hello"; b = typeof a ==="string" && a; ?

如何理解js中的 var a="hello"; b = typeof a ==="string" && a; ?

如何理解js中的
var a="hello";
b = typeof a ==="string" && a; ?
有没有其他的扩展性的或者类似的写法?


if(typeof a === 'string'){
    b = a;
}else{
    b = false;
}
//或者
b = (typeof a === 'string') ? a : false;

第2个表达式是个赋值语句,用括号把操作符的优先级表示出来,如下:

var b = ((typeof a) === 'string') && a;//题主的代码没有用var,建议声明变量时都用var,避免污染

((typeof a) === 'string') && a 的运算结果赋值给变量b

解释一下&&操作符:
&&操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,&&操作数不一定返回布尔值,此时它遵循下列规则:

1.如果第一个操作数是对象,则返回第二个操作数;
2.如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
3.如果两个操作数都是对象,则返回第二个操作数;
4.如果有一个操作数是null,则返回null;
5.如果有一个操作数是NaN,则返回NaN;
6.如果有一个操作数是undefined,则返回undefined。
(JavaScript高级程序设计3.5.3节)

(typeof a) === 'string'的结果为true
所以 b = true && a; 按照规则2,b = a

在js中,会经常利用&&||的特性进行赋值,算是比较巧妙地用法吧!


b = (typeof a === 'string') ? a : false;
【热门文章】
【热门文章】