【发布时间】:2020-02-15 07:12:43
【问题描述】:
如果我使用:
1.09 * 1; // returns "1.09"
但如果我使用:
1,09 * 1; // returns "9"
我知道 1,09 不是数字。
最后一段代码中的逗号有什么作用?
更多示例
if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert
alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too
alert("2",
foo = function (param) {
alert(param)
},
foo('1')
)
foo('3'); // alerts 1, 2 and 3
【问题讨论】:
-
我很惊讶 09 并没有因为八进制文字中的非法 '9' 而失败。
-
@recursive - 八进制表示中的任何 9 都会导致回退到十进制。
-
不要混淆参数列表中的逗号。
alert只接受一个参数。之后的任何内容都将被丢弃。 -
@Andrew:是的,被 alert() 丢弃了,它只接受一个参数,但它会被运行!这很奇怪。谢谢。
-
@Topera:如果您从 JS 的角度考虑,这并不奇怪。在 JS 中,您不必在函数声明中指定参数列表(您可以改用
arguments对象,它可以是任意长度)。即使使用现代编译的 JS,也无法提前知道函数需要多少参数。考虑一下:function test() { args=[]; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i] + 1); } ;解释器必须知道函数是如何被使用的,才能知道它需要多少个参数。相反,它会评估所有内容。