首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我只能得到最后一个'hasOwnProperty‘调用的结果?

在JavaScript中,对象的原型链是由原型对象组成的,每个对象都有一个指向其原型对象的内部链接。当我们使用对象的属性时,JavaScript引擎会首先在对象本身中查找该属性,如果找不到,它会沿着原型链向上查找,直到找到该属性或者到达原型链的顶端。

在给定的问答内容中,提到了"hasOwnProperty"方法。这是JavaScript中的一个内置方法,用于检查一个对象是否具有指定的属性。该方法只会检查对象本身是否具有该属性,而不会沿着原型链向上查找。

当我们使用"hasOwnProperty"方法时,如果对象本身具有该属性,则返回true;如果对象本身不具有该属性,或者该属性存在于原型链上的其他对象中,则返回false。

现在来解答为什么只能得到最后一个"hasOwnProperty"调用的结果。假设我们有一个对象obj,它的原型链上有多个对象,分别是obj1、obj2、obj3。当我们连续调用多个"hasOwnProperty"方法时,例如:

代码语言:txt
复制
console.log(obj.hasOwnProperty('property1').hasOwnProperty('property2').hasOwnProperty('property3'));

在这个例子中,第一个"hasOwnProperty"方法会检查obj对象本身是否具有"property1"属性。如果具有,则返回true,否则返回false。接下来,第二个"hasOwnProperty"方法会检查上一个方法的返回值(true或false)是否具有"property2"属性。同样,第三个"hasOwnProperty"方法会检查上一个方法的返回值是否具有"property3"属性。

由于每个"hasOwnProperty"方法只会检查其前一个方法的返回值,而不会继续向上查找原型链,所以最后一个"hasOwnProperty"调用的结果是基于obj对象本身的属性检查结果。

需要注意的是,如果我们在原型链上的任何一个对象中具有同名的属性,那么只有最后一个对象中的属性会被访问到。这是因为在原型链中,后面的对象会覆盖前面的对象。

总结起来,只能得到最后一个"hasOwnProperty"调用的结果是因为每个方法只会检查其前一个方法的返回值,而不会继续向上查找原型链。同时,如果原型链上的对象具有同名的属性,只有最后一个对象中的属性会被访问到。

关于云计算、IT互联网领域的名词词汇以及相关产品和介绍链接,由于要求不能提及特定的云计算品牌商,我无法给出具体的推荐。但你可以通过搜索引擎或者腾讯云官方网站来了解相关的概念、分类、优势、应用场景以及腾讯云的相关产品和介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

令人头秃的js隐式转换面试题,你能做对吗

- * / 这些运算符只会针对number类型,故转换的结果只能是转换成number类型。既然要隐式转换,那到底怎么转换呢,应该有一套转换规则,才能追踪最终转换成什么了。...他只是一个转换标志,转化后的结果并不一定是这个参数所值的类型,但是转换结果一定是一个原始值(或者报错)。...1、如果输入的值已经是一个原始值,则直接返回它2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法, 如果valueOf()方法的返回值是一个原始值,则返回这个原始值。...故得到最终的结果,"[object Object]" + "[object Object]" = "[object Object][object Object]"再来一个指定类型的例子:2 * {} =...而后,ToPrimitive(a, Number)首先调用valueOf方法,返回1,得到原始类型1。最后 1 == 1, 返回true。我们再看一段很复杂的比较,如下:[] == !{}//1、!

50020

ES13的11个超赞的新属性

使用in来判断某个对象是否拥有某个私有属性 这个新属性的名字其实叫做Ergonomic Brand Checks for Private Fields,原谅我才疏学浅,我实在不知道怎么翻译,所以大概将它的作用表达了出来...(obj, 'color') 当hasOwnProperty需要被多次调用的时候,我们可以通过将这部分逻辑抽象成一个方法来减少重复的代码: function objHasOwnProp(obj, propertyKey...,例如找到数组里面最后一个偶数,这个时候还用find()和findIndex()的话得到的结果是错误的: const nums = [7, 14, 3, 8, 10, 9]; // 返回了14, 结果应该是...另一个问题是findIndex()得到索引后我们还要做一些额外的计算才能得到元素原数组的位置,具体做法是: const nums = [7, 14, 3, 8, 10, 9]; // 在调用reverse...nums].reverse(); // 这次返回对了,是10 const lastEven = reversed.find((value) => value % 2 === 0); // findIndex得到的结果还是不对的

39420
  • JS 原生方法原理探究(七):如何实现 Object.assign()?

    Object.assign() 的基本用法 要实现 Object.assign(),首先了解它的大概用法: 接受的第一个参数表示目标对象(浅拷贝的结果),如果是 null 或者 undefined,直接报错...下面这两种情况容易理解: Object.assign({a:1},"cd") // 把 "cd" 的可枚举属性 0 和 1 添加到目标对象上,最后得到 {a:1,0:“c”,1:"d"} Object.assign...("cd",{a:1}) // 把 {a:1} 的可枚举属性 a 添加到目标对象上,最后得到 String{“cd”,a:1} 但如果是这种情况: Object.assign("ab","cd")...比如,Objetc.myAssign([1,2,3],[8,9]) 的结果将不是期望得到的 [8,9,3],而是 [8,9],因为目标对象的长度被覆盖了。...但是为什么不直接使用 obj.hasOwnProperty(key) 呢? 这是因为,我们对源对象的情况并不了解。

    5K20

    ECMAScript13 中11个令人惊叹的 JavaScript 新特性

    #lastName); 3.await顶层操作 在 JavaScript 中,await运算符用于暂停执行,直到 一个Promise被解决(执行或拒绝)。 以前只能在async中使用此运算符。...(null) 创建的对象),那么试图调用该方法将会产生错误。...console.log(obj.hasOwnProperty('color')); 为了克服这些问题,我们可以利用属性调用方法Object.prototype.hasOwnProperty.call(...尽管find()和findIndex()都是从数组的第一个元素开始搜索,但在某些情况下,从最后一个元素开始搜索可能会更有效。 有些情况下,我们知道从数组的末尾进行查找可能会获得更好的性能表现。...举个例子,假设我们要查找数字列表中的最后一个偶数,使用find()或findIndex()方法可能会导致错误的结果: const nums = [7, 14, 3, 8, 10, 9]; // 给出 14

    25820

    Javascript之其实我觉得原型链没有难的那么夸张!

    还有Global不能直接访问,Arguments仅在函数调用时由JS引擎创建,Math和JSON是以对象的形式存在的。   这么多构造器可以创建对象,我怎么知道它是由谁创建的?我怎么知道我是谁呢?...我擦嘞,好像有点意思诶?其实我觉得到这里,大家就都懂了。...上一个不能返回symbol的,这回这个只能返回symbol的。...注意:应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改。...toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。

    65720

    Javascript之其实我觉得原型链没有难的那么夸张!

    哦...原来是这样,也就是说,实际上Object有两种结果...一个object,一个function。那我怎么区分呢?我怎么知道到底是object还是function。我怎么知道它是对象还是函数?...typeof的结果里不是还有个function么?是的。其实函数也是对象。 注意:这里有一个问题,就是值类型到底算不算是对象!首先,我觉得值类型也算是对象的。...还有Global不能直接访问,Arguments仅在函数调用时由JS引擎创建,Math和JSON是以对象的形式存在的。   这么多构造器可以创建对象,我怎么知道它是由谁创建的?我怎么知道我是谁呢?...上一个不能返回symbol的,这回这个只能返回symbol的。... toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。

    74730

    理解原型与原型链

    __proto__),控制台打印的结果是function(){},为什么Person的原型是function呢?这是因为Person是一个构造函数,它的本质就是一个函数。...__proto__ => function(){} 由此可见,原型链记录了原型对象创建的整个过程,因此,我给原型链添加一个概念:原型链是原型对象创建过程的历史记录。...为什么?因为C的原型是B,B的原型是A。...所以最后的结果是 4 3 1 2。这就解释了原型链继承时查找属性的过程是先查找自身属性,当自身属性不存在时,会在原型链中逐级查找。...(c["a"]) //属性 a 不是自身属性,不会执行这一步 } hasOwnProperty 函数只能检查对象是否拥有某个属性,那如何遍历对象的自身属性?

    56320

    面试常考手写代码学习技巧总结

    起名字与具体功能考虑 起名字 手写函数的时候,我每次给参数或者函数起名字都要犹豫那么几秒。面试官还以为我不会写嘞!...对象深拷贝 肯定需要返回一个一个拷贝后的对象,在初期会声明一个空对象,最后返回这个处理过的对象。...也就是说,for...of 循环内部调用的是数据结构的 Symbol.iterator 方法。..., null 的判定有误差,得到的结果 如果使用 typeof null得到的结果是object 操作符对对象类型及其子类型,例如函数(可调用对象)、数组(有序索引对象)等进行判定,则除了函数都会得到...(判断一个值是否是NaN,只能使用isNaN( ) 来判断) (3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。

    1.1K20

    jQuery中的isPlainObject()方法 实现原理

    () 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性 //相当于 Object.prototype.hasOwnProperty var hasOwn = class2type.hasOwnProperty...; //因为 hasOwn 是一个函数,所以这里调用的是内置对象 Function 的toString() 方法 //相当于 Function.prototype.toString var fnToString...proto) { return true; } //最后判断是不是通过 "{}" 或 "new Object" 方式创建的对象 //如果 proto 有 constructor属性...") && proto.constructor; //如果 Ctor 类型是 "function" ,并且调用Function.prototype.toString 方法后得到的字符串 与 "function...只能区分基本类型,比如数组,typeof 返回的还是 “object” 字符串 var arr = []; var obj = {}; typeof arr; //"object" typeof

    1.4K50

    为了面试能通过,我要看完这75道面试题(下)

    调用函数,可以使用哪些方法? 67. 什么是缓存及它有什么作用? 68. 手动实现缓存方法 69. 为什么typeof null返回 object? 如何检查一个值是否为 null?...NaN表示“非数字”是 JS 中的一个值,该值是将数字转换或执行为非数字值的运算结果,因此结果为NaN。...然后我们比较最后,结果是。 最后,得到一个二进制数001,对应的十进制数,即1。 function isEven(num) { } 59. 如何检查对象中是否存在某个属性?...缓存是建立一个函数的过程,这个函数能够记住之前计算的结果或值。使用缓存函数是为了避免在最后一次使用相同参数的计算中已经执行的函数的计算。...为什么typeof null 返回 object? 如何检查一个值是否为 null? typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。

    2.4K10

    解析赋值、浅拷贝和深拷贝

    实际操作的是对象内存的地址,最后使两个变量具有相同的引用,都指向同一个对象,因此这两个变量相互之间有影响 3.2 浅拷贝 定义: 浅拷贝即 swallow copy,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝...Object.assign() Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,最后再将目标对象返回。...为了实现正常的报错,我们必须在内部使用严格模式。 为什么要用 Object.prototype.hasOwnProperty.call()? 通过 for...in.....得到的是源对象自身及其原型链上的可枚举属性,但浅拷贝只需要拷贝自身可枚举属性,所以需要用 hasOwnProperty() 筛选,但是直接调用这个方法是不行的。...,因此不具有 hasOwnProperty() 方法,在调用的时候会报错。

    59720

    4个Javascript 中的 for 循环

    有趣的是,每个 Array 对象都有一个 length 属性,这使得它的行为更像其他语言中的数组。 但是为什么遍历Array对象的时候不输出length属性呢?...:返回一个元素满足回调函数的新数组 map:在返回之前处理原始数组中的元素 reduce:依次处理数组中的元素,将上一次处理的结果作为下一次处理的输入,最终得到最终结果。...在不同浏览器下测试的结果是forEach没有for快。如果将测试代码放在控制台中,可能会得到不同的结果。主要原因是控制台的执行环境与真实的代码执行环境不同。...最后一个例子: const arr = [‘a’, ‘b’, ‘c’]; const iter = arr[Symbol.iterator](); iter.next() // { value: ‘a’...我以后有时间写一篇关于它的文章。

    48040

    详解Object.create(null)

    在Vue和Vuex的源码中,作者都使用了Object.create(null)来初始化一个新对象。为什么不用更简洁的{}呢?...1523414268433 这次就和使用{}创建的对象一模一样了。至此,我相信大家已经对两者的区别十分清楚了。...Object.create(null)的使用场景 再回到文章开头的问题,为什么很多源码作者会使用Object.create(null)来初始化一个新对象呢?这是作者的习惯,还是一个最佳实践?...(a,'toString')){ ... } //为什么不能直接用a.hasOwnProperty('toString')?...总结: 你需要一个非常干净且高度可定制的对象当作数据字典的时候; 想节省hasOwnProperty带来的一丢丢性能损失并且可以偷懒少些一点代码的时候 用Object.create(null)吧!

    87840

    看完这几道 JavaScript 面试题,让你与考官对答如流(下)

    调用函数,可以使用哪些方法? 67. 什么是缓存及它有什么作用? 68. 手动实现缓存方法 69. 为什么typeof null返回 object? 如何检查一个值是否为 null?...NaN表示“非数字”是 JS 中的一个值,该值是将数字转换或执行为非数字值的运算结果,因此结果为NaN。...然后我们比较最后,结果是。 最后,得到一个二进制数001,对应的十进制数,即1。 function isEven(num) { } 59. 如何检查对象中是否存在某个属性?...缓存是建立一个函数的过程,这个函数能够记住之前计算的结果或值。使用缓存函数是为了避免在最后一次使用相同参数的计算中已经执行的函数的计算。...为什么typeof null 返回 object? 如何检查一个值是否为 null? typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。

    2K10

    前端day19-JS高级(函数调用的上下文模式)学习笔记

    console.log(max);//91 案例04:万能检测数据类型 之前我们都是通过typeof检测数据类型,但是我们会发现当我们去检测null或者数组时无法得到准确的结果...为什么数组调用toString和对象调用toString得结果不一样?...()和Object的toString() 结果不一样 原因:数组的原型也有自己的toString() : 调用数组的join方法返回一个字符串 Object.prototype...: 原型链最终都会指向Object.prototype,意味着所有的对象可以访问他的成员变量 hasOwnProperty():判断对象是否拥有某个成员 isPrototypeOf():判断一个对象是否是另一个对象的原型...(1)自己的成员 (2)原型的成员 疑惑:为什么hasOwnProperty与propertyIsEnumerable看起来好像作用一样 数组的length属性属于数组对象的成员,但是for-in循环无法枚举

    1.2K10
    领券