我读了节点的源代码(v0.10.33),在文件buffer.js
中,我找到了这个函数:
SlowBuffer.prototype.toString = function(encoding, start, end) {
encoding = String(encoding || 'utf8').toLowerCase();
start = +start || 0;
if (typeof end !== 'number') end = this.length;
// Fastpath empty strings
if (+end == start) {
return '';
}
switch (encoding) {
case 'hex':
return this.hexSlice(start, end);
case 'utf8':
case 'utf-8':
return this.utf8Slice(start, end);
case 'ascii':
return this.asciiSlice(start, end);
case 'binary':
return this.binarySlice(start, end);
case 'base64':
return this.base64Slice(start, end);
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return this.ucs2Slice(start, end);
default:
throw new TypeError('Unknown encoding: ' + encoding);
}
};
但我不理解这一行的含义:start = +start || 0;
,+
之前start
的目的是什么?
以下是答案: +和 - 运算符也有一元版本,它们只在一个变量上运行。当以这种方式使用时,+返回对象的数字表示,而 - 返回其负对应。
var a = "1";
var b = a; // b = "1": a string
var c = +a; // c = 1: a number
var d = -a; // d = -1: a number
+
也用作字符串连接运算符:如果其任何参数是字符串或者不是数字,则任何非字符串 参数转换为字符串,2个字符串 级联。例如,5 + [1,2,3]计算字符串“51, 2,3“。更有用的是,str1 +”“+ str2返回str1连接的 str2,之间有空格。