Javascript 大数字打断下划线.js 41;包含的内容

Javascript 大数字打断下划线.js 41;包含的内容,javascript,arrays,mongoose,underscore.js,biginteger,Javascript,Arrays,Mongoose,Underscore.js,Biginteger,在调试mongoose回调时,我发现下划线.js或JavaScript语言本身似乎存在大数字问题 在下面的示例中,为了尽可能清楚地显示问题,我存储了一个小数字和一个包含mongoose的ObjectId(24位数字)的字符串 var users = ["32", "300000000000000000000002"]; alert(_.contains(users, "32")); // true alert(_.contains(users, (32).toString())); // tru

在调试
mongoose
回调时,我发现下划线.js或JavaScript语言本身似乎存在大数字问题

在下面的示例中,为了尽可能清楚地显示问题,我存储了一个小数字和一个包含mongoose的ObjectId(24位数字)的字符串

var users = ["32", "300000000000000000000002"];
alert(_.contains(users, "32")); // true
alert(_.contains(users, (32).toString())); // true
alert(_.contains(users, "300000000000000000000002")); // true
alert(_.contains(users, (300000000000000000000002).toString())); // false - wait wat ?
当然,我的问题是,如何使最后一次呼叫返回为真


我不希望将数组
用户
转换为数字数组,因为(1)数组在生产环境中可能很大,(2)我可能需要对数组执行其他操作。

最后返回的
“3e+23”
不等于
“30000000000000000002”

问题总是我得到一个输入字符串,它会自动转换为一个数字(通过库)。因此,我只需将“外键”设置为较小的数字。我最终创建了一个自定义数字自动生成函数来解决此问题:

var autoIncrement = require('mongoose-auto-increment');
var address = require('./Address');
var connection = mongoose.createConnection(address.mongo());
autoIncrement.initialize(connection);

var UserSchema = new mongoose.Schema({ /* property definitions */});
mongoose.model('User', UserSchema);

UserSchema.plugin(autoIncrement.plugin, {
    model: 'User',
    startAt: 10000001
});
因此,我不得不更改引用机制:

var GroupSchema = new mongoose.Schema({
    users: [{type: Number, ref: 'User'}],
    /* other property definitions */
});

(3000000000000000002).toString()==“3e+23”
24位数字对js来说太多了,虽然您的诊断输入很受欢迎,并帮助了我,但我仍在寻找解决方案Object的是24字节字符串,而不是24位数字。为什么不将搜索输入限制为字符串?好的,您已经给出了问题的有效技术原因。但有解决办法吗?