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

时间:2016-09-29 17:21:12

标签: javascript

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

var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;

4 个答案:

答案 0 :(得分:7)

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

它的工作原理如下:

  1. 评估左侧操作数(在您的情况下,typeof g != 'undefined')。
  2. 如果该值为 falsy ,那就是操作的结果,我们就此止步。
  3. 如果该值为 truthy ,则 2 评估右侧操作数(year)并将其作为操作的结果。
  4. 通过以下示例:

    1. 评估typeof g != 'undefined'。由于typeof g'string''string' != 'undefined'true
    2. true不是假的,所以我们不会停止。
    3. 评估year并将结果作为结果。
    4. 因此f获得分配给它的2016年(year的值)。

      &&有一个同样有趣的堂兄||,我写了一篇关于此行为的博文:JavaScript's Curiously-Powerful OR Operator (||)

      1 Falsy 值是在被视为布尔值时强制为false的值。虚假值为0""NaNnullundefined,当然还有“假”。

      2 Truthy 值是非 falsy 的值(当它们被视为布尔值时,它们强制true。)< / p>

      注意:当您将它们用作布尔值时,值的行为方式它们与布尔值相比时的行为方式相同。 "foo"是一个真值,但"foo" == true"foo" === true都是 false

答案 1 :(得分:2)

是的,f的值为2016

让我们分解您的代码。

typeof g != 'undefined' //returns true

在逻辑运算符的情况下,将返回最终值。在你的情况下

true && year //returns 2016

当满足&&时,将返回最终值(年份)并将其分配给f

答案 2 :(得分:1)

&amp;&amp;运算符总是返回它测试的最后一个东西,因为在你的情况下是年份,它将返回year的值。

&amp;&amp;永远不会将变量转换为布尔值,它只检查它是否是真正的值。

答案 3 :(得分:0)

&&运算符如果为false则求值为左参数,否则求值为正确参数。

由于g 未定义,typeof g != 'undefined'为真,typeof g != 'undefined' && year评估为year,即2016年。

(这与其他语言不同,其中&&||等逻辑运算符的结果将始终为布尔值,但JavaScript不是这种情况。)