JavaScript 多行注释中的“@”符号有啥作用?

Posted

技术标签:

【中文标题】JavaScript 多行注释中的“@”符号有啥作用?【英文标题】:What does the '@' symbol do in JavaScript multiline comments?JavaScript 多行注释中的“@”符号有什么作用? 【发布时间】:2019-10-16 01:16:47 【问题描述】:

在我浏览了 Muuri 源代码并到处看到这个之后,我真的很好奇:

var htmlCollectionType = '[object HTMLCollection]';
var nodeListType = '[object NodeList]';

/**
 * Check if a value is a node list
 *
 * @param * val
 * @returns Boolean
 */
export default function isNodeList(val) 
  var type = Object.prototype.toString.call(val);
  return type === htmlCollectionType || type === nodeListType;

@param 和 @returns 似乎实际上并没有做任何事情(我认为),但它们的突出显示方式不同。事实上,如果你查看 git 中的代码,它们会突出显示 as though they're not comments。

这是我不知道的一些 javascript 语法吗?这里发生了什么?我很想知道。

【问题讨论】:

它们是 cmets,提供函数isNodeList 接受的参数和返回值的描述。您的函数返回 boolean value 并接受 * 指示的所有 DT 的参数。 【参考方案1】:

这只是使用JSDoc comments。语法受 Java 的影响,Java 将 JavaDoc cmets 作为标准的一部分。简而言之,注释记录了一个函数或方法的作用,它有一些特殊的语法——它是一个以/** 开头的块注释,而不是仅仅/*,以将它与普通块注释区分开来,你可以使用一些表示不同含义的注释:

@param 表示这是一个参数。 中的值表示参数的类型 - 在本例中,* 表示“任何”,但您可以记录类似 @param string@param number 的内容 val 是函数使用的参数的名称。 您可以选择为参数添加描述,例如 @param * val - used for foo and bar @return 记录了函数的返回。 中的值又是类型。在这种情况下,一个布尔值。 您仍然可以选择为返回值添加注释,例如:@returns Boolean true if correct, false if incorrect

您可以使用 JSDoc 语法记录更多内容,例如 @copyright 指定许可证或 @throws 声明某些代码可能抛出的预期异常。一些语法是特定于函数或方法的,另一些是特定于对象甚至整个文件的。

总而言之,这是一种将文件中的描述标准化的尝试。您不需要需要对评论做任何事情,但您也可以使用读取 cmets 并对其采取行动的工具 - 有些像 Tern.js 将读取 cmets 并尝试检查您的代码是否符合,例如,如果你有

/**
 * @param number bar
 * @return boolean
 */
function foo(bar) 

如果您致电foo("abc"),那么您可能会收到工具警告您应该传递一个数字。或者,如果您使用foo(123).replace("a", "b"),您可能会收到一条警告,提示您正在尝试对应该是布尔值的字符串方法。

其他工具可能只是抓取您的 JS 文件并生成文档。 Java 使用 JavaDoc 做到这一点 - 您可以基于 JavaDoc cmets 自动为您的方法和类生成文档。你会得到一个文档in the official Java style,这意味着任何文档都是一致的。

【讨论】:

以上是关于JavaScript 多行注释中的“@”符号有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

javascript基础总结

JavaScript 中的 ^(插入符号)符号有啥作用?

Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量

python文章的字符串注释方式

VC6.0中有啥快捷键可以注释多行语句吗?

学习单行注释和多行注释