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