2011-09-17 72 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語法定義的一個奇怪之處。