Node.js混淆了参数的语法

我正在查看Buffer.alloc()方法的Buffer类,文档将此方法声明为Buffer.alloc(size [,fill [,encoding]]),我很困惑这个参数是什么。 我来自c + + / c / java / c#语法抛出我不知道什么大小[,填充[,编码]]应该代表? 数组? 什么是逗号? 为什么这些嵌套? 为什么有空插槽? 我看了,似乎不能find解释或教程? 这是一个Node.js具体还是这是一个JavaScript的东西?

方括号表示来自扩展的Backus-Naurforms ,并且指示所包含的参数是可选的。

size[,fill[,encoding]]意味着size参数是必需的,但是fillencoding (包括前面的逗号)是可选的。 而且,这意味着只有在指定了fill情况下才能指定encoding

引用这个答案 :

方括号表示里面的东西是可选的 – 要么有,要么没有。 这是一个简洁的方式列出有效的调用表单。

在你的情况下,方括号表示有3个签名:

 Buffer.alloc(size ) Buffer.alloc(size, fill ) Buffer.alloc(size, fill, encoding) 

暗示

为了可读性,我故意忽略了这些参数。 每当你看到像a(b, , ,) ,,,)这样a(b, , ,)东西时,想象在没有值的逗号之间有一个undefinednull ,所以a(b, undefined, undefined, undefined)

简单的例子

另一个例子可能是这样的:

 example(alpha, [, beta], [, gamma], delta) 

…这意味着以下签名将起作用:

 example(alpha, , , delta) example(alpha, , gamma, delta) example(alpha, beta, , delta) example(alpha, beta, gamma, delta) 

嵌套

在你的情况下, Buffer.alloc(size[,fill[,encoding]])encoding参数只有在fill参数被提供时才被提供,因为encoding嵌套在fill周围的方括号中。 所以,以下是无效的:

 Buffer.alloc(size, , encoding). 

多嵌套参数

多个参数也可以嵌套在一个括号内:

 example2(alpha, [, beta, gamma] [,delta]) 

…这意味着这些电话是有效的

 example2(alpha, beta, gamma, ) example2(alpha, , , ) example2(alpha, beta, gamma, delta) example2(alpha, , , delta) 

…虽然这些是无效的

 example2(alpha, beta, , ) example2(alpha, , gamma, ) example2(alpha, beta, , delta) example2(alpha, , gamma, delta) 

在哪里可以find这个符号

正如@ cybersam在他的回答中所说,这个符号被称为Extended Backus-Naur 。 它也可以在很多手册页 , jQuery文档和许多其他文档中find。

文档中的方括号中的参数通常意味着“这部分是可选的”。 在Buffer.alloc的情况下,这意味着您可以通过三种方式调用它:

 Buffer.alloc(size) Buffer.alloc(size, fill) Buffer.alloc(size, fill, encoding) 

括号不是实际的JavaScript,而是通常用于在文档中描述这个。