在javascript中测试typeof以及数字变量

Fab*_*ano -1 javascript

为什么如果我写下面的脚本,变量f的值是2016?

var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 7

因为&&JavaScript中的一个非常有趣的运算符:与其他一些语言不同,它不会产生truefalse(必然).相反,结果&&是它的左操作数的值,如果它是假的,1或其右操作数的值否则.

它的工作原理如下:

  1. 评估左侧操作数(在您的情况下typeof g != 'undefined').
  2. 如果该值是假的,那就是操作的结果,我们就此止步.
  3. 如果该值是真实的,则2评估右侧操作数(year)并将其作为操作的结果.

以下为您的示例:

  1. 评估typeof g != 'undefined'.既然typeof g'string','string' != 'undefined'那就是true.
  2. true 不是假的,所以我们不要停止.
  3. 评估year并制作结果.

因此f获得year分配给它的2016(价值).

&&有一个同样有趣的堂兄,||我写了一篇关于这种行为的博客文章:JavaScript的奇怪强大的OR运算符(||)


1 值是false在被视为布尔值时强制使用的值.该falsy值0,"",NaN,null,undefined,当然还有'假的.

2 Truthy值是非虚假的值(true当像布尔值一样处理时它们强制).

注意:当您使用它们以布尔值的行为方式是不是如果他们的行为以同样的方式比较他们布尔值."foo"是truthy价值,但"foo" == true"foo" === truefalse.