比较节点js中的字符串属性的非常奇怪的行为(vs-code)

时间:2017-01-14 20:05:46

标签: node.js visual-studio-code

这是来自调试控制台:

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);

the repo

1 个答案:

答案 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包中的问题一样。