Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么2..toString()可以工作?_Javascript - Fatal编程技术网

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()