Javascript 为什么2..toString()可以工作?
为什么Javascript 为什么2..toString()可以工作?,javascript,Javascript,为什么2..toString()返回2但2.toString()抛出此错误 例如: console.log(2..toString()); // prints 2 // Firefox throws the error // `SyntaxError: identifier starts immediately after numeric literal` console.log(2.toString()); var x = 2; console.log(x.toString()); //
2..toString()
返回2
但2.toString()
抛出此错误
例如:
console.log(2..toString()); // prints 2
// Firefox throws the error
// `SyntaxError: identifier starts immediately after numeric literal`
console.log(2.toString());
var x = 2;
console.log(x.toString()); // prints 2
// Firefox throws the error
//`TypeError: XML descendants internal method called on incompatible Number`
console.log(x..toString());
这是因为
2.
被解析为2.0
,所以2..toString()
相当于2.0.toString()
,这是一个有效的表达式
另一方面,
2.toString()
被解析为2.0toString()
,这是一个语法错误。2
只是一个数字,它没有任何方法可调用
2.
可以强制为字符串,该字符串是一个对象(即'2.0'
),因此可以使用该方法
只是2.toString()
将被解析为2.0tostring()
,这当然没有意义
查看如何解析这两者:
vs
顺便说一下,生成这些的工具是:2..toString()
将被解释为2.0.toString()
实际上,2.
是一个数字:console.log(typeof 2.)代码>将给出:编号
由于Number对象覆盖了object对象的toString方法,因此首先必须明确使用paranthesis来表示它是一个数字,而不是一个对象
我的猜测是2.
隐式地将其定义为一个float,然后它可以使用Number对象的.toString()
方法,而不是object对象的方法
2.toString()
解释器看到2
并想,“哦,一个数字!”然后,它看到点并想,“哦,一个十进制数字!”然后,它转到下一个字符并看到一个t
,它感到困惑。“2.t
不是有效的十进制数,”当它抛出语法错误时,它说
解释器看到2
并想,“哦,一个数字!”然后,它看到点并想,“哦,一个十进制数字!”然后,它看到另一个点并想,“哦,我想这是我们数字的结尾。现在,我们正在看这个对象的属性(数字2.0)。”,它调用2.0
对象的toString
方法。(2)。toString()生成预期结果。(不是答案,而是测试…)IE也会出错吗?我知道,但为什么2..toString()
也会起作用?我怀疑这是因为2
是一个原始值,而(2)
或2.
会将其转换为对象,但我不太了解其中的机制。关于2.toString()“SyntaxError:意外标记非法“2.
在Chromium的控制台中产生2
。@G.kayalp,是的,两个2==2.0
和2.==2.0是真实的
。我讨厌在这里做魔鬼代言人,但是2.==2
是真的
并且wellAFAIK JS没有整数和小数的不同类型。它有“number”
类型,这是一个64位浮点数。@G.kayalp,是的,你说得对。这就是控制台将2.0
显示为2
的方式,因为这两个表达式具有相同的值和类型。2也是如此。
与2
相比。找到了。工具在这里()你能解释一下图表是如何表明第一个是错误的吗?两者似乎都在一个数字框中。我看不出这些图表有什么帮助。。。。你能回答吗?对不起,我不得不让孩子们吃到一半的早餐——我同意,我不确定图表是否正确地表示了事情。不管怎么说,这都是重复的,所以也许可以忽略我的答案。谢谢你的回复:-)
2..toString()