这是来自调试控制台:
a[0]
"15711"
a[0] == "15711"
"false"
parseInt(a[0]) == 15711
"true"
有人可以解释一下吗?
" a" property是我使用fast-csv从csv文件中读取的行之一。 这是代码: var fs = require('fs')
var path = require('path')
var csv = require('fast-csv');
var all = [];
var stream = fs.createReadStream(path.join("./items.txt"));
var csvStream = csv({ delimiter: '\t' })
.on("data", function (data) {
console.log(data[0] == '1')
})
.on("end", function () {
})
stream.pipe(csvStream);
答案 0 :(得分:2)
好的,你的例子在repo上有一个只有值为1的CSV。你可以看到这个" 1"的长度。 char实际上是2(预期为1)。 第一个String的第一个char是一个不可见的char。 我做了一个:
data[0].charCodeAt(0)
检查那个字符是什么。它给了我65279的值,它是Zero width no break space。此字符是来自UTF8编码流的BOM。 您正在使用的项目有一个未解决的问题(here)。
由于这是一个空格字符,我们可以使用trim()将其删除,并使比较行为正常。
或者使用解决方案从管道中剥离BOM,就像使用strip-bom-stream包中的问题一样。