6

我可能想多了,但我无法消化 Nodejs 文档。我是 javascript 新手,来自 Java 背景。

我的问题不在于任何特定的 nodejs 功能,而只是总体理解。下面我举一个我想要理解的例子......

当使用像 Java 这样的静态类型语言时,方法调用需要哪些类型非常清楚。一个简单的例子,如果我想对一个 int 数组进行排序,我可以查看Arrays.sort并看到它需要一个 int[](其他类型也一样)。我还可以看到它返回无效。

public static void sort(int[] a)

然而 javascript 是一种动态语言,因此没有用于 api 调用的类型。以加密模块中的这个例子为例

crypto.pbkdf2(password, salt, iterations, keylen, callback)
Asynchronous PBKDF2 applies pseudorandom function HMAC-SHA1 to derive a 
key of given length from      the given password, salt and iterations. 
The callback gets two arguments (err, derivedKey).

因此,如果不出去寻找示例代码,或者查看 nodejs 源代码,我如何知道函数的参数类型?我意识到可以通过查看名称来派生类型(即回调是一种函数类型),但还有其他方法吗?

例如,文档说回调有两个参数 err 和 derivedKey。derivedKey的类型是什么,是什么类型还是err?我是否遗漏了有关文档的内容?你怎么知道你是否传递了正确的类型?

注意:我已经知道 derivedKey 和 err 的类型是什么,所以我不需要像“derivedKey is ....”这样的答案。我的问题是关于来自静态类型语言的人对 Nodejs 文档的整体理解,并且是不特定于crypto.pdkdf2。

4

2 回答 2

2

好吧,你想多了。如果没有明确解释,您将不得不猜测其中的大部分。就像你可以猜到的迭代和 keylen 是数字而不是字符串。当 NodeJS 文档认为您无法猜测或您必须了解有关它的其他信息时,会明确解释参数。就像crypto.createCredentials(details)他们解释的那样,详细信息是一本字典以及您需要使用哪些键。Fi 在 err 和 derivedKey 的情况下,因为没有明确的信息,我会假设两者都是字符串。如果事实证明它们不是,我会将它们控制台记录在回调函数中以查看它们是什么。

如果他们写下所有参数的类型但不知道是否值得努力,文档可能会更加清晰。

于 2013-07-21T20:21:31.880 回答
2

我在 C# 和 Java 方面有一些经验,并且已经编写了大约一年的 JavaScript,所以我可能能够构建这个框架。

对象

JavaScript 的一个方面是您可以在现场制作这样的对象:

var options = {
    name: "something",
    age: 9,
    what: function() {
        return 8;
    }
};

每个人都利用了这一点,因此它是理解 JavaScript 库的一大关键。

你也可以拿上面的options对象,然后像这样:

options.mood = "ok";

换句话说,对象只是属性的捆绑,结构没有设置。您可以使用for ... in循环之类的语言结构来遍历它们。也就是说,like 的“类型”err基本上是一个关联数组。

回调

回调基本上无处不在,所以问题就变成了如何处理它们。一个常见的模式是function (err, maybeSomething). 大多数时候,你只关心是否err是“某事”。也就是说,你会经常这样:

if (err) {
    ...
}

坦率地说,我做了很多工作console.log(err)来看看我在开发过程中得到了什么。

在那之后,它真的取决于文档。其中一些比其他更好。你并没有真正错过任何东西。关于唯一的“技巧”是有时文档会在顶部解释所有内容。

有时您会发现自己进入源代码以了解库到底在做什么,但 97% 的情况下,一些快速的猜测和检查会让您感动。

于 2013-07-21T20:36:26.677 回答