const test = new Date()
test.hasOwnProperty('getTime') // false
'getTime' in test // true
这意味着getTime不在test的原型中(不是它自己的原型),而是在层次结构上(因为in工作)。为什么,我找不到解释这件事的参考资料。这是由于getTime“属性”是如何定义的吗?
function Animal(name,numLegs){
this.name = name;
this.numLegs = numLegs}
Animal.prototype.sayName = function(){
console.log("Hi my name is " + this.name );}
var penguin = new Animal("Captain Cook", 2);
penguin.sayName();
for (var prop in penguin){
console.log(prop);}
penguin.hasO
在我看来,有四种不同的方法可以确定给定对象(例如foo)是否具有定义的给定属性(例如bar):
if (foo.hasOwnProperty(bar)) {
if ('bar' in foo) {
if (typeof foo.bar !== 'undefined') {
if (foo.bar === undefined) {
要确定对象bar中是否有一个名为“foo”的属性,这三个语句是否都是等价的?我不知道这三种语句中有什么不同之处吗?
有这段代码
var a = {date : 12};
for(var t in a){
alert(t);
}
我有一个带有日期属性的警报。
但在任何地方(即),我都看到它需要编写:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
那么,为什么我看不到对象的内部属性呢?
我刚读到一个,它建议使用in操作符进行浏览器特性和对象属性检测。给出的例子是:
if("geolocation" in navigator) {
// Do some stuff
}
而不是:
if(navigator.geolocation) {
// Do some stuff
}
然而,它没有提到hasOwnProperty,尽管下面的代码似乎运行得很好:
if(navigator.hasOwnProperty('geolocation')) {
// Do some stuff
}
在某些情况下,我应该使用in而不是hasOwnP
实际上,我不确定是在javascript中偶然发现了一种不想要的行为,还是这是某种有意的行为。
以下代码将生成一个真正的语句:
var test= {"test":1}
document.write("constructor" in test);
如果我将其更改为以下代码,它将返回false:
var test= {"test":1}
document.write(test.hasOwnProperty("constructor"));
我想向每个对象添加一个方法。
当我刚刚设置Object.prototype.somefunction = ...时,当有人使用通常的模式枚举对象时,就会出现这样的情况:
for (i in o){
if (o.hasOwnProperty(i)){
// do something with object
}
}
我试图把它放在原型链的更高的位置,但这是不可能的(至少在Chrome中是不可能的):
TypeError:无法设置未定义的属性“blah”
我是否可以在方法上设置一些标志或其他东西,使其不会被枚举,就像本地方法不会被枚举一样?(或者至少让hasOwn
我开发的一个客户端javascript库在某些方面使用对象作为散列。它通过使用属性名作为键的for...in循环遍历从Json数据解析而来的对象。例如。(伪代码)
var conversations = {'sha1-string':{name:'foo',messages:[]}}
for(var id in conversations){
console.log(id);
console.log(conversations[id].name);
}
不幸的是,MooTools (和Prototype等)向全局名称空间添加了方法,所以我的for
我有一个相当简单的问题:在Javascript中,我如何返回布尔值(如果它在JSON中找到)而不是实际值?
示例:
var myJSON = {
"foo" : "bar",
"bar" : "foo"
};
var keyToLookFor = "foo";
var found = myJSON[keyToLookFor];
if (found) {
// I know I can test