标签: hasownproperty

为什么使用Object.prototype.hasOwnProperty.call(myObj,prop)而不是myObj.hasOwnProperty(prop)?

如果我理解正确,Javascript中的每个对象都继承自Object原型,这意味着Javascript中的每个对象都可以通过其原型链访问hasOwnProperty函数.

在阅读require.js的源代码时,我偶然发现了这个函数:

function hasProp(obj, prop) {
    return hasOwn.call(obj, prop);
}
Run Code Online (Sandbox Code Playgroud)

hasOwn是一个参考Object.prototype.hasOwnProperty.写这个函数是否有任何实际的区别

function hasProp(obj, prop) {
    return obj.hasOwnProperty(prop);
}
Run Code Online (Sandbox Code Playgroud)

既然我们在这,我们为什么要定义这个功能呢?这只是一个快捷方式和本地缓存属性访问(轻微)性能提升的问题,还是我错过了任何可能在没有此方法的对象上使用hasOwnProperty的情况?

javascript prototypal-inheritance hasownproperty requirejs

85
推荐指数
3
解决办法
3万
查看次数

Javascript hasOwnProperty中的属性是什么?

if (someVar.hasOwnProperty('someProperty') ) {
 // do something();
} else {
 // do somethingElse();
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的使用/解释hasOwnProperty('someProperty')

为什么我们不能简单地someVar.someProperty用来检查对象是否someVar包含具有名称的属性someProperty

在这种情况下,什么是财产?

这个javascript检查什么属性?

javascript object hasownproperty

69
推荐指数
4
解决办法
12万
查看次数

Object.hasOwn() 与 Object.prototype.hasOwnProperty()

新方法Object.hasOwn()返回一个布尔值,指示指定对象是否将指定属性作为其自己的属性,但也有Object.prototype.hasOwnProperty(),它们之间有什么区别,使用其中一个相对于另一个有什么好处?

javascript prototypal-inheritance javascript-objects hasownproperty

29
推荐指数
1
解决办法
2万
查看次数

对象没有hasOwnProperty方法(即它是未定义的) - IE8

这看起来很奇怪.

这是我在IE8控制台中的实验:

typeof obj1 // "object"
obj1.hasOwnProperty // {...}

typeof obj2 // "object"
obj2.hasOwnProperty // undefined
Run Code Online (Sandbox Code Playgroud)

关于什么可能导致这个问题的任何想法?

javascript internet-explorer-8 ie-developer-tools hasownproperty

27
推荐指数
1
解决办法
2万
查看次数

JavaScript:是否定义了成员?

在我看来,有四种不同的方法可以确定给定的对象(例如foo)是否具有bar定义的给定属性(例如):

  1. if (foo.hasOwnProperty(bar)) {
  2. if ('bar' in foo) {
  3. if (typeof foo.bar !== 'undefined') {
  4. if (foo.bar === undefined) {

要确定对象中是否存在名为" bar"的属性foo,这些语句中的所有三个都是等效的吗?是否有任何我不知道的sublte语义会使这三个语句中的任何一个不同?

javascript hasownproperty

20
推荐指数
2
解决办法
1027
查看次数

检查对象在 Typescript 中是否有键并使用该键

我有以下代码:

let show = {
    createTag: false,
    updateFeature: false,
    createFeatureGroup: false,
    deleteFeature: false,
    deleteCycle: false,
};
Run Code Online (Sandbox Code Playgroud)

我从查询字符串中获取一个值,我想将其与 show 的键进行匹配。

下面的代码工作正常,但我想要一种方法让 Typescrpt 推断它并避免必须发出强制转换:

const showDialog = $page.query.get('show') || '';

if (showDialog && showDialog in show) {
    // I want to get rid of the "<keyof typeof show>" cast
    show[<keyof typeof show>showDialog] = true; 
}
Run Code Online (Sandbox Code Playgroud)

我虽然只是发出showDialog in show打字稿就会知道 showDialog 里面if是 的键show,但情况似乎并非如此。

casting key object hasownproperty typescript

17
推荐指数
2
解决办法
1万
查看次数

如果未定义Property,则使用Object.hasOwnProperty与测试的好处

因为hasOwnProperty有一些警告和怪癖(窗口/广泛使用ie8问题/等).

我想知道是否有任何理由甚至使用它,如果只是测试一个属性是否未定义更合理和更简单.

例如:

var obj = { a : 'here' };

if (obj.hasOwnProperty('a')) { /* do something */ }

if (obj.a !== undefined) { /* do something */ }
// or maybe (typeof (obj.a) !== 'undefined')
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有人对此有任何好的见解,我更愿意使用最跨浏览器的友好和最新的方法.

我也看过这个原型覆盖了hasOwnProperty,它起作用了,但我没有卖掉它的实用性......

if (!Object.prototype.hasOwnProperty) {
    Object.prototype.hasOwnProperty = function(prop) {
        var proto = this.__proto__ || this.constructor.prototype;
        return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
    };
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery object undefined hasownproperty

13
推荐指数
3
解决办法
2万
查看次数

修复“不要从目标对象访问 Object.prototype 方法‘hasOwnProperty’”错误

根据hasOwnProperty()方法文档,我写了以下内容:

const myObj = {
  prop1: 'val1',
  prop2: 'val2'
}

if (!myObj.hasOwnProperty('prop3')) {
  myObj.prop3 = 'val3'
}
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

不要从目标对象访问 Object.prototype 方法“hasOwnProperty”

如果与文档中的相同,为什么它不起作用,以及如何修复它?

hasownproperty

13
推荐指数
1
解决办法
1万
查看次数

为什么hasOwnProperty无法识别对象原型上的函数?

我知道hasOwnPropertyJavaScript 中的方法只用于识别当前类型的属性,但是原型链中有一些东西让我感到困惑.

让我们假设我定义了一个名为Bob的类型,并以两种不同的方式为我的Bob类型分配两个子函数:

function Bob()
{
    this.name="Bob"; 
    this.sayGoodbye=function()
    {
        console.log("goodbye");   
    }
}

Bob.prototype.sayHello= function()
{
    console.log("hello");   
}
Run Code Online (Sandbox Code Playgroud)

现在,除了可以访问闭包范围之外,在sayGoodbye我看来,属于Bob该类的两个函数应该或多或少相等.但是,当我查找它们时,hasOwnProperty就JavaScript而言它们并不相同:

var myBob = new Bob();
console.log( myBob.name ); // Bob, obviously 
console.log( myBob.hasOwnProperty("sayHello"));  // false
console.log( myBob.hasOwnProperty("sayGoodbye")); // true
console.log( "sayHello" in myBob ); // true
Run Code Online (Sandbox Code Playgroud)

在范围方面发生了什么?如果没有和它连接Bob的属性,我无法创建该类型的实例,那么为什么原型方法是关注的二等公民呢?是一种独立于类型存在的类型,从哪个类继承所有东西?sayHello()sayGoodbye()hasOwnPropertyBob.prototypeBobBob

javascript prototype hasownproperty

11
推荐指数
1
解决办法
1万
查看次数

如何修复Object.keys()中缺少的键与使用hasOwnProperty()的for ...相比较

在某些浏览器(Chrome,Safari浏览器),Object.keys()不返回所有的按键时for-in循环hasOwnProperty()回报.

有没有使用for-in循环的解决方法?

还有另一个对象,window它表现出同样的错误,或者只是window对象的问题,因为我的测试往往显示?

澄清

两者都应该返回自己的和只有可枚举的属性,因为我们可以从文档中读取:

结论:他们应该迭代相同的键:只有可枚举自己的属性.

浏览器结果

1)Firefox 39:没有丢失密钥

2)Chromium 38:47缺少键:

["speechSynthesis", "localStorage", "sessionStorage", "applicationCache", "webkitStorageInfo", "indexedDB", "webkitIndexedDB", "crypto", "CSS", "performance", "console", "devicePixelRatio", "styleMedia", "parent", "opener", "frames", "self", "defaultstatus", "defaultStatus", "status", "name", "length", "closed", "pageYOffset", "pageXOffset", …
Run Code Online (Sandbox Code Playgroud)

javascript cross-browser for-in-loop hasownproperty

8
推荐指数
0
解决办法
1427
查看次数