Javascript 为什么是typeof';s结果与传入表达式的计算结果不同?
如果两个对象加在一起等于NaN(不是一个数字),这在技术上属于数字类型,那么为什么将两个对象的类型加在一起会导致“字符串” 我将通过回复来表达这一点:Javascript 为什么是typeof';s结果与传入表达式的计算结果不同?,javascript,object,types,nan,typeof,Javascript,Object,Types,Nan,Typeof,如果两个对象加在一起等于NaN(不是一个数字),这在技术上属于数字类型,那么为什么将两个对象的类型加在一起会导致“字符串” 我将通过回复来表达这一点: {}+{} >NaN 好啊两个对象加在一起创建NaN >typeof(NaN) >“数字” 好啊我们知道NaN的类型是“数字” >typeof({}+{}) “字符串” 等待这不应该也是“数字”吗 我知道javascript有一个不那么理想的类型系统,但我对这里发生的事情感到困惑。是否由于某种原因,正在将类型从数字转换为字符串?数字甚至是这里进行
{}+{}
>NaN
好啊两个对象加在一起创建NaN
>typeof(NaN)
>“数字”
好啊我们知道NaN的类型是“数字”
>typeof({}+{})
“字符串”
等待这不应该也是“数字”吗
我知道javascript有一个不那么理想的类型系统,但我对这里发生的事情感到困惑。是否由于某种原因,正在将类型从数字转换为字符串?数字甚至是这里进行的类型转换的一部分吗?或者我只是使用了typeof错误?
{}+{}
是一个空的块({}
),后面是从对象到数字的类型转换(+{}
)。它基本上读作
{} // empty block (a statement)
; // empty statement (just for clarity)
+{}; // expression statement (unary plus, object literal -> conversion to number)
但是,如果使用typeof({}+{})
,则{}+{}
将被计算为表达式,在这种情况下,{}
只能是对象文本,+
是串联运算符
也可以仅使用分组运算符强制将构造计算为表达式:
({} + {}) // expression statement (string concatenation with two objects)
另请参阅和其他有关的问题。
{}+{}
是一个空的块({}
),后面是从对象到数字的类型转换(+{}
)。它基本上读作
{} // empty block (a statement)
; // empty statement (just for clarity)
+{}; // expression statement (unary plus, object literal -> conversion to number)
但是,如果使用typeof({}+{})
,则{}+{}
将被计算为表达式,在这种情况下,{}
只能是对象文本,+
是串联运算符
也可以仅使用分组运算符强制将构造计算为表达式:
({} + {}) // expression statement (string concatenation with two objects)
另请参阅和其他有关的问题。
{}+{}
是一个空的块({}
),后面是从对象到数字的类型转换(+{}
)。它基本上读作
{} // empty block (a statement)
; // empty statement (just for clarity)
+{}; // expression statement (unary plus, object literal -> conversion to number)
但是,如果使用typeof({}+{})
,则{}+{}
将被计算为表达式,在这种情况下,{}
只能是对象文本,+
是串联运算符
也可以仅使用分组运算符强制将构造计算为表达式:
({} + {}) // expression statement (string concatenation with two objects)
另请参阅和其他有关的问题。
{}+{}
是一个空的块({}
),后面是从对象到数字的类型转换(+{}
)。它基本上读作
{} // empty block (a statement)
; // empty statement (just for clarity)
+{}; // expression statement (unary plus, object literal -> conversion to number)
但是,如果使用typeof({}+{})
,则{}+{}
将被计算为表达式,在这种情况下,{}
只能是对象文本,+
是串联运算符
也可以仅使用分组运算符强制将构造计算为表达式:
({} + {}) // expression statement (string concatenation with two objects)
另请参见与相关的问题。
{}+{}!=({}+{})
第一个大括号形成一个块。因为JavaScript。还可以看到这个非常棒的演讲,其中有一个例子:{}+{}!==({}+{})
第一个大括号形成一个块。因为JavaScript。还可以看到这个非常棒的演讲,其中有一个例子:{}+{}!==({}+{})
第一个大括号形成一个块。因为JavaScript。还可以看到这个非常棒的演讲,其中有一个例子:{}+{}!==({}+{})
第一个大括号形成一个块。因为JavaScript。另请参见本精彩演讲,其特色就是以下示例: