Javascript 如何在JS中创建不可变的值?
我从这样的函数中得到一个随机值:Javascript 如何在JS中创建不可变的值?,javascript,Javascript,我从这样的函数中得到一个随机值: var randomString = function(length) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''); if (! length) { length = Math.floor(Math.random() * chars.length); }
var randomString = function(length) {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
if (! length) {
length = Math.floor(Math.random() * chars.length);
}
var str = '';
for (var i = 0; i < length; i++) {
str += chars[Math.floor(Math.random() * chars.length)];
}
return str;
}
但是当我尝试使用“id”变量时,每次都是不同的值,因为它每次都调用函数
我试着把它放在一个物体里,然后像这样冻结它:
var id = {};
Object.defineProperty( id, "id", {
value: randomString(10),
writable: false,
enumerable: false,
configurable: false
});
var newid = Object.freeze(id);
但每次我尝试使用“newid.id”变量时,它仍然会得到一个新的随机字符串
如何使用相同的随机字符串两次?有没有办法将其冻结或保持不变 这将非常容易使用php会话。但是,使用javascript cookie怎么样?看看:jscookieat别担心,我是个白痴。值正在其他地方更改。这不是真的。函数只运行一次。运行上述代码时,
id
变量应为常量。我刚刚测试并验证了多次记录id
每次都记录相同的输出:。如何使用id
变量?向我们展示完整的代码。最有可能的情况是,您有多个id
变量,但没有注意到它(例如,多次执行包含它的函数)。如果您担心重新分配id
,请将其设置为const
,而不是var
;不要担心字符串值,它们不能被改变。@obsidymanage它在async.eachOfSeries循环中的angular.forEach循环中-也许这就是原因?我不知道,谢谢你的尝试。@jthomasbailey好的,是的,如果你不想在每次迭代中得到一个新的随机值,就把它放到循环之外。不,我想我对他想做什么有一个合理的想法。为了能够两次使用随机字符串,他可以使用本地存储将第一个生成的id存储在会话或cookie中。我错了吗?这并没有直接解决问题,这比使用cookies或PHP.PHP更简单?OP没有透露他正在使用哪种服务器端技术。(问题中显示的代码甚至可以在Node.js中运行服务器端本身。)您可能只想删除问题。
var id = {};
Object.defineProperty( id, "id", {
value: randomString(10),
writable: false,
enumerable: false,
configurable: false
});
var newid = Object.freeze(id);