语法错误,还是没有语法错误?

时间:2011-09-17 04:29:04

标签: javascript

var zero = 0;
zero.toString();   // '0' --> fine
0.toString();      // syntax error!
0..toString();     // '0' --> fine

我的结论:致电x.toString()不仅取决于x的价值,还取决于x 呈现的方式

JavaScript中是否有其他此类示例,我可能会因为演示而出现意外的语法错误?

2 个答案:

答案 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语法定义的一个奇怪之处。