如何理解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;