严格的相等运算符将告诉您两个对象类型是否相等.但是,有没有办法判断两个对象是否相等,就像 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)
也就是说,属性是否与我添加它们的顺序相同?
是否有一种优雅的方式来访问对象的第一个属性...
for .. injQuery 那样的循环$.each例如,我需要在foo1不知道foo1名称的情况下访问对象:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
Run Code Online (Sandbox Code Playgroud) 如果我有一个像这样的对象:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Run Code Online (Sandbox Code Playgroud)
如果我事先不知道列表上升到'c',除了遍历对象之外,有没有办法获取对象中的最后一项(例如'carrot')?
假设你有一个Javascript对象,如{'cat':'meow','dog':'woof'...}是否有一种更简洁的方法从对象中选择一个随机属性,而不是我想出的这种漫长的方式:
function pickRandomProperty(obj) {
var prop, len = 0, randomPos, pos = 0;
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
len += 1;
}
}
randomPos = Math.floor(Math.random() * len);
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (pos === randomPos) {
return prop;
}
pos += 1;
}
}
}
Run Code Online (Sandbox Code Playgroud) 如果我有这样的数组:
var arr = ['one','two','three'];
Run Code Online (Sandbox Code Playgroud)
我这样做可以访问不同的部分:
console.log(arr[1]);
Run Code Online (Sandbox Code Playgroud)
如何按顺序而不是按键访问对象属性?
例:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
Run Code Online (Sandbox Code Playgroud)
我如何获得每个对象的第一个属性 - 来自obj"甚至更多"的东西jbo- 没有显式使用属性名称?
现在,你们中的一些人似乎认为我是在做以下事情:
console.log(obj['something']);
Run Code Online (Sandbox Code Playgroud)
事实并非如此,我特意寻找目标指数,就像第一个例子一样 - 如果可能的话.
ES6是否为对象属性引入了明确定义的枚举顺序?
var o = {
'1': 1,
'a': 2,
'b': 3
}
Object.keys(o); // ["1", "a", "b"] - is this ordering guaranteed by ES6?
for(let k in o) {
console.log(k);
} // 1 2 3 - is this ordering guaranteed by ES6?
Run Code Online (Sandbox Code Playgroud) 所以我有一个像这样的JavaScript对象:
foo = {
"one": "some",
"two": "thing",
"three": "else"
};
Run Code Online (Sandbox Code Playgroud)
我可以循环这样:
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
这将遍历的顺序性one> two> three.
不过有时我需要以相反的顺序穿过去,所以我希望做同样的循环,但three> two> one.
问题:
是否存在"对象反转"功能.如果它是一个数组,我可以反转或构建一个新数组,unshift但是当我需要反向循环它的属性时,我迷失了对象的操作.有任何想法吗?
谢谢!
我通过一系列设置调用设置了很多属性,例如
this.set('prop1', value1);
this.set('prop2', value2);
.......
Run Code Online (Sandbox Code Playgroud)
有没有办法在一次调用中执行此操作(类似于创建对象时)?例如
this.setMultiple({prop1: value1, prop2: value2});
Run Code Online (Sandbox Code Playgroud)
我仍然没有完全理解Ember的继承模型.也许是沿袭的reopen?
JavaScript对象没有为属性存储订单(根据规范).Firefox似乎在使用for...in循环时保留属性定义的顺序.这种行为是我可以依赖的吗?如果没有,那么在某处实现有序哈希类型的JavaScript代码?
javascript ×9
object ×5
arrays ×1
ecmascript-6 ×1
ember.js ×1
equals ×1
for-loop ×1
hashcode ×1
properties ×1
reverse ×1