var zero = 0;
zero.toString(); // '0' --> fine
0.toString(); // syntax error!
0..toString(); // '0' --> fine
我的结论:致电x.toString()
不仅取决于x
的价值,还取决于x
呈现的方式。
JavaScript中是否有其他此类示例,我可能会因为演示而出现意外的语法错误?
答案 0 :(得分:1)
嗯,在其他情况下,符号出现的上下文会影响它们的行为方式,例如,语句Block vs vs Object Literals:
{} // 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
字符。
另见:
答案 1 :(得分:0)
变量的值无关紧要,但“呈现”的方式可能会使其成为有效或无效的语法。见highly upvoted answer。这只是EcmaScript语法定义的一个奇怪之处。