【问题标题】:behaviour of typeof in javascriptjavascript中typeof的行为
【发布时间】:2013-03-29 10:30:35
【问题描述】:

有人可以解释为什么 typeof 的行为方式如下:

typeof 
//Returns: SyntaxError: Unexpected token } (Quite obvious)

"Why am I a " + typeof 
//Returns: SyntaxError: Unexpected token }

"Why am I a " + typeof + ""; 
//Returns: "Why am I a number"

"Why am I a " + typeof + "??"; 
//Returns: "Why am I a number"

【问题讨论】:

    标签: javascript typeof


    【解决方案1】:

    typeof isn't a function but a unary operator,所以

    typeof + ""; 
    

    相同
    typeof (+ "");
    

    +somethingsomething 转换为EcmaScript norm on the unary + operator 中精确的数字:

    一元+运算符将其操作数转换为数字类型。

    【讨论】:

    • 哦。不知道!其他 JS 函数也会发生这种情况吗? (func + ""func(+ "") 的转换??还是只是特定于 typeof
    • @gopi1410:逻辑上是一样的,而不是语法上的,因为typeof是一个运算符。
    • @gopi1410: typeof 不是函数,而是运算符。 typeof + "" 成为有效 JS 的唯一方法是将 + 解释为一元运算符,这就是解释器正在做的事情。这与乘以一个负数相同:5 * -3。这被解释为5 * (-3)。在这种情况下,- 只能是一元运算符。
    【解决方案2】:

    +"..." 实际上会将字符串解析为数字。这将导致typeof + "" 返回“数字”,即使返回的数字是NaN

    前两种用法完全是错误的,因为typeof 需要右手边。

    参考资料:

    【讨论】:

    • 这是否意味着右侧被转换为函数参数?其他 JS 函数也会出现这种情况吗?
    • 没有。 typeof 不是函数。它是一个像! 这样的一元运算符。 typeof 右侧的括号只是代码杯上的额外糖。
    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多