Javascript indexOf,但用于对象?
我想查看一个对象,并将它的每个现有属性分配给一个变量 有4种可能的属性。有些对象具有全部4个。有些可能只有两个 如何检查特定属性是否存在?数组是否有indexOf()的等价物,而对象是否有indexOf()的等价物?使用关键字:Javascript indexOf,但用于对象?,javascript,arrays,object,indexof,Javascript,Arrays,Object,Indexof,我想查看一个对象,并将它的每个现有属性分配给一个变量 有4种可能的属性。有些对象具有全部4个。有些可能只有两个 如何检查特定属性是否存在?数组是否有indexOf()的等价物,而对象是否有indexOf()的等价物?使用关键字: 对象中的“键” 它返回true或false,具体取决于对象或其原型链中的任何对象是否具有该属性 您还可以使用,如果对象本身具有key属性,而不是其原型,则该属性将仅为true。例如: var object = {}; "toString" in object; // t
对象中的“键”
它返回true
或false
,具体取决于对象或其原型链中的任何对象是否具有该属性
您还可以使用,如果对象本身具有key
属性,而不是其原型,则该属性将仅为true
。例如:
var object = {};
"toString" in object; // true
object.hasOwnProperty("toString"); // false
var a = {hasOwnProperty: Boolean};
a.hasOwnProperty('name'); // true
hasOwnProperty.call(a, 'name'); // false
请注意(根据@dandavis的评论),如果对象
有一个名为hasOwnProperty
的自定义属性,这将受到阻碍;要解决此问题,请使用hasOwnProperty.call(对象,“键”)
。例如:
var object = {};
"toString" in object; // true
object.hasOwnProperty("toString"); // false
var a = {hasOwnProperty: Boolean};
a.hasOwnProperty('name'); // true
hasOwnProperty.call(a, 'name'); // false
使用关键字:
对象中的“键”
它返回true
或false
,具体取决于对象或其原型链中的任何对象是否具有该属性
您还可以使用,如果对象本身具有key
属性,而不是其原型,则该属性将仅为true
。例如:
var object = {};
"toString" in object; // true
object.hasOwnProperty("toString"); // false
var a = {hasOwnProperty: Boolean};
a.hasOwnProperty('name'); // true
hasOwnProperty.call(a, 'name'); // false
请注意(根据@dandavis的评论),如果对象
有一个名为hasOwnProperty
的自定义属性,这将受到阻碍;要解决此问题,请使用hasOwnProperty.call(对象,“键”)
。例如:
var object = {};
"toString" in object; // true
object.hasOwnProperty("toString"); // false
var a = {hasOwnProperty: Boolean};
a.hasOwnProperty('name'); // true
hasOwnProperty.call(a, 'name'); // false
var obj={
傅:1,,
酒吧:2,
巴兹:3
}
Object.keys(obj).forEach(函数(key){
窗口[键]=对象[键]
})
console.log(foo、bar、baz)
var obj={
傅:1,,
酒吧:2,
巴兹:3
}
Object.keys(obj).forEach(函数(key){
窗口[键]=对象[键]
})
log(foo、bar、baz)
如果您只对直接在对象上设置的属性感兴趣(无法通过原型链访问),那么如果对象具有指定的属性,则将提供布尔值true
例如:testObject.hasOwnProperty('propertyToCheckFor')
将返回true
如果testObject.propertyToCheckFor
存在,否则将返回false
有关更详细的示例,请参见以下代码:
var obj1={
a:1
};
变量obj2={
答:1,,
b:2
};
变量obj3={
b:2,
c:3
};
变量obj4={
答:1,,
b:2,
c:3
};
//为方便起见
document.write(“”+JSON.stringify({
obj1:{
hasA:obj1.hasOwnProperty('a'),
hasB:obj1.hasOwnProperty('b'),
hasC:obj1.hasOwnProperty('c')
},
obj2:{
hasA:obj2.hasOwnProperty('a'),
hasB:obj2.hasOwnProperty('b'),
hasC:obj2.hasOwnProperty('c')
},
obj3:{
hasA:obj3.hasOwnProperty('a'),
hasB:obj3.hasOwnProperty('b'),
hasC:obj3.hasOwnProperty('c')
},
obj4:{
hasA:obj4.hasOwnProperty('a'),
hasB:obj4.hasOwnProperty('b'),
hasC:obj4.hasOwnProperty('c')
}
},空,2)+''代码>如果您只对直接在对象上设置的属性感兴趣(无法通过原型链访问),那么如果对象具有指定的属性,则将提供布尔值true
例如:testObject.hasOwnProperty('propertyToCheckFor')
将返回true
如果testObject.propertyToCheckFor
存在,否则将返回false
有关更详细的示例,请参见以下代码:
var obj1={
a:1
};
变量obj2={
答:1,,
b:2
};
变量obj3={
b:2,
c:3
};
变量obj4={
答:1,,
b:2,
c:3
};
//为方便起见
document.write(“”+JSON.stringify({
obj1:{
hasA:obj1.hasOwnProperty('a'),
hasB:obj1.hasOwnProperty('b'),
hasC:obj1.hasOwnProperty('c')
},
obj2:{
hasA:obj2.hasOwnProperty('a'),
hasB:obj2.hasOwnProperty('b'),
hasC:obj2.hasOwnProperty('c')
},
obj3:{
hasA:obj3.hasOwnProperty('a'),
hasB:obj3.hasOwnProperty('b'),
hasC:obj3.hasOwnProperty('c')
},
obj4:{
hasA:obj4.hasOwnProperty('a'),
hasB:obj4.hasOwnProperty('b'),
hasC:obj4.hasOwnProperty('c')
}
},空,2)+''代码>您可以使用分解分配。如果未定义值,变量将设置为未定义
。您还可以检查变量是否在解构后定义,然后通过引用删除变量
您可以使用分解分配。如果未定义值,变量将设置为未定义
。您还可以检查变量是否在解构后定义,然后通过引用删除变量
很难想象你的代码仅仅是纯文本。想在这里透露相关的源代码吗?这是为了更好地帮助您。您是否尝试过使用hasOwnProperty
或使用object.keys
将对象转换为数组?如果属性不能为false(例如它们都是子对象),则duck键入可读且快速:if(obj.key1);警报(对象键1.名称)代码>false
或,包括0
和其他常见values@qxz:是的,这就是我的意思,好的呼叫很难想象你的代码是纯文本的。想在这里透露相关的源代码吗?这是为了更好地帮助您。您是否尝试过使用hasOwnProperty
或使用object.keys
将对象转换为数组?如果属性不能为false(例如它们都是子对象),则duck键入可读且快速:if(obj.key1);警报(对象键1.名称)代码>false
或,包括0
和其他常见values@qxz:是的,这就是我的意思,很好的callObject。keys+forEach工作得很好,但是对于大型对象,它比过滤的for-in慢得多……不要使用大型对象;)key+forEach工作得很好,但是对于大对象,它比过滤的for慢得多……不要使用大对象;)<代码>{hasOwnProperty:Boolean}
?@dandavis什么?如果有人