var zero = 0;
zero.toString(); // '0' --> fine
0.toString(); // syntax error!
0..toString(); // '0' --> fine
我的结论:在调用x.toString()
并不仅仅依赖于x
的价值,而且在途中x
是呈现。语法错误,或没有语法错误?
在JavaScript中还有其他这样的例子,我可能因演示文稿而导致意外的语法错误吗?
var zero = 0;
zero.toString(); // '0' --> fine
0.toString(); // syntax error!
0..toString(); // '0' --> fine
我的结论:在调用x.toString()
并不仅仅依赖于x
的价值,而且在途中x
是呈现。语法错误,或没有语法错误?
在JavaScript中还有其他这样的例子,我可能因演示文稿而导致意外的语法错误吗?
好了,还有其他的情况下,其中的符号出现在背景影响他们的行为,例如,语句块的VS对象文本:
{} // empty block
var o = {}; // empty object
({}); // empty object
0,{} // empty object
{ foo: 'bar'} // block, `foo` label, 'bar' ExpressionStatement
var o = { foo: 'bar'}; // object literal, declaring a `foo` property
// whose value is 'bar'
他们看起来完全一样,但块评估板在“语句上下文”中,在表达式上下文中评估对象文字。
此外,函数声明与函数语句,如:
function foo() {}.length; // SyntaxError, `foo` is a function declaration
0,function foo() {}.length; // 0, `foo` is a function expression
(function foo {}).length; // 0
您发表例如涉及到数字文本的语法的定义方式,后点的小数部分是可选的,用于例如:
var n = 0.;
是一个有效的数字文字,这就是为什么,访问0.toString
给你一个SyntaxError
,解释所期望的小数部分,而不是s
字符。
参见:
变量的值并不重要,但“显示”的方式可能会使其语法有效或无效。看到这个highly upvoted answer。这只是EcmaScript语法定义的一个奇怪之处。
另一种方式是'(0)的ToString();' – epascarello
从我所知道的'.'操作的对象,0就这样ISN还没有一个对象,如@epascarello所示,(0)会将它转换为一个对象,使'''运算符可用...''..具有相同的效果,但您也可以使用更明确的方式数(0) –