2011-09-17 68 views
0
var zero = 0; 
zero.toString(); // '0' --> fine 
0.toString();  // syntax error! 
0..toString();  // '0' --> fine 

我的结论:在调用x.toString()并不仅仅依赖于x的价值,而且在途中x呈现语法错误,或没有语法错误?

在JavaScript中还有其他这样的例子,我可能因演示文稿而导致意外的语法错误吗?

+1

另一种方式是'(0)的ToString();' – epascarello

+0

从我所知道的'.'操作的对象,0就这样ISN还没有一个对象,如@epascarello所示,(0)会将它转换为一个对象,使'''运算符可用...''..具有相同的效果,但您也可以使用更明确的方式数(0) –

回答

1

好了,还有其他的情况下,其中的符号出现在背景影响他们的行为,例如,语句块的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字符。

参见:

0

变量的值并不重要,但“显示”的方式可能会使其语法有效或无效。看到这个highly upvoted answer。这只是EcmaScript语法定义的一个奇怪之处。