严格的相等运算符将告诉您两个对象类型是否相等.但是,有没有办法判断两个对象是否相等,就像 Java中的哈希码值一样?
Stack Overflow问题JavaScript中是否有任何类型的hashCode函数?类似于这个问题,但需要更多的学术答案.上面的场景说明了为什么需要有一个,我想知道是否有任何等效的解决方案.
如果我创建这样的对象:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)
生成的对象总是这样吗?
{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)
也就是说,属性是否与我添加它们的顺序相同?
我的应用程序有一大堆对象,我将其字符串化并保存到磁盘.遗憾的是,当数组中的对象被操纵并且有时被替换时,对象上的属性以不同的顺序(它们的创建顺序?)列出.当我对数组执行JSON.stringify()并保存它时,diff会显示以不同顺序列出的属性,这在尝试使用diff和合并工具进一步合并数据时会很烦人.
理想情况下,我想在执行stringify之前按字母顺序对对象的属性进行排序,或者作为stringify操作的一部分.存在用于在许多地方操纵数组对象的代码,并且改变它们以总是以显式顺序创建属性将是困难的.
建议是最受欢迎的!
一个浓缩的例子:
obj = {}; obj.name="X"; obj.os="linux";
JSON.stringify(obj);
obj = {}; obj.os="linux"; obj.name="X";
JSON.stringify(obj);
Run Code Online (Sandbox Code Playgroud)
这两个stringify调用的输出是不同的,并显示在我的数据的差异中,但我的应用程序不关心属性的排序..对象是以多种方式构建的.
我想创建一个哈希表,将我的对象作为他的密钥,而不将其转换为String.
有点像这样:
var object1 = new Object();
var object2 = new Object();
var myHash = new HashTable();
myHash.put(object1, "value1");
myHash.put(object2, "value2");
alert(myHash.get(object1), myHash.get(object2)); // I wish that it will print value1 value2
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅我的答案以获得完整的解决方案
我正在认证为我JSON-RPC API和我的当前工作的策略是使用通过发送请求签约POST了SSL。
我想知道是否有人可以看到我没有使用以下签名方法考虑的任何漏洞。
客户端和服务器之间的所有通信都是通过POST发送的请求完成的SSL。httpAPI 服务器会直接拒绝不安全的请求。
依赖关系
var uuid = require('node-uuid');
var crypto = require('crypto');
var moment = require('moment');
var MyAPI = require('request-json').newClient('https://api.myappdomain.com');
Run Code Online (Sandbox Code Playgroud)
依赖链接:node-uuid , crypto , moment , request-json
瓦尔斯
var apiVersion = '1.0';
var publicKey = 'MY_PUBLIC_KEY_UUID';
var secretKey = 'MY_SECRET_KEY_UUID';
Run Code Online (Sandbox Code Playgroud)
请求对象
var request = {
requestID : uuid.v4(),
apiVersion : apiVersion,
nonce : uuid.v4(),
timestamp : moment.utc( new Date() ),
params : params
}
Run Code Online (Sandbox Code Playgroud)
签名 …
我在加载网页时加载JSON,并通过客户端中的用户操作进行更改.当用户离开时想要查看JSON是否已更改.而不是在JSON中逐个比较值是什么方式来制作一个哈希字符串并在JavaScript中作为一个整体进行比较?