JavaScript中in和hasOwnProperty区别详解

yizhihongxing

下面是针对这个主题的详细讲解:

JavaScript中in和hasOwnProperty区别详解

what is in

in 关键字可以用于判断一个对象是否具有某个属性,或者一个数组中是否包含某个元素。其用法如下:

propertyNameOrIndex in objectOrArray

这里propertyNameOrIndex代表要查找的属性名或者数组中的索引位置,objectOrArray代表要查找的对象或者数组。

判断对象是否具有某个属性:

const obj = { name: 'Tom', age: 18 };
console.log('name' in obj); // true
console.log('email' in obj); // false

判断数组中是否包含某个元素:

const arr = [1, 2, 3];
console.log(0 in arr); // true
console.log(4 in arr); // false

what is hasOwnProperty

hasOwnProperty 方法是 JavaScript 中的一个实例方法,它返回一个布尔值,表示一个对象是否具有指定的属性。其用法如下:

obj.hasOwnProperty(propertyName)

这里obj代表要判断的对象,propertyName代表要查找的属性名。

判断对象是否具有某个属性:

const obj = { name: 'Tom', age: 18 };
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('email')); // false

需要注意的是,hasOwnProperty 只能检测对象本身的属性,无法检测从原型继承的属性。

差异

它们的区别在于hasOwnProperty 可以检测对象本身的属性,无法检测从原型继承的属性,而 in 关键字可以检测对象本身的属性和从原型继承的属性。

function Person(name) {
  this.name = name;
  this.sayName = function() {
    console.log(this.name);
  };
}

Person.prototype.sayAge = function() {
  console.log(this.age);
};

const tom = new Person('Tom');
tom.age = 18;

console.log(tom.hasOwnProperty('name')); // true
console.log(tom.hasOwnProperty('age')); // true
console.log('name' in tom); // true
console.log('age' in tom); // true
console.log(tom.hasOwnProperty('sayAge')); // false
console.log('sayAge' in tom); // true

由上例可以看到,tom 既有自己的属性,也从原型继承了方法,但是 hasOwnProperty 只能检测到 tom 自己的属性,无法检测到从原型继承的方法,而 in 关键字既能检测到自身的属性,也能检测到从原型继承的方法。

总结

  • in 主要用于检测对象本身以及从原型继承的属性和元素。
  • hasOwnProperty 只检测对象本身的属性和元素,无法检测从原型继承的属性和元素。

希望这篇文章能够帮助你清晰地理解 JavaScript 中的 inhasOwnProperty

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中in和hasOwnProperty区别详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript简化代码 A=alert w=document.writeln

    JavaScript是一门强大的脚本语言,有很多便于编程的技巧,其中之一就是简化代码。在这个问题中,使用了两个技巧:缩写函数名和变量名。下面详细解释一下。 缩写函数名和变量名 在JavaScript中,可以通过为函数和变量起一个简短的名字来简化代码。例如,可以将alert()函数缩写成A(),将document.writeln()方法缩写成w(),使得代码更…

    JavaScript 2023年5月27日
    00
  • jQuery实现动态加载(按需加载)javascript文件的方法分析

    下面为您详细讲解“jQuery实现动态加载(按需加载)javascript文件的方法分析”的完整攻略。 什么是动态加载javascript文件? 在网站开发中,js是必不可少的组成部分。但有时我们的网页可能需要加载多个js文件,如果在页面加载的时候将所有的js文件一次性下载就会影响到页面的加载速度。 因此,动态加载(按需加载)javascript文件成为一种…

    JavaScript 2023年5月27日
    00
  • Javascript的setTimeout()使用闭包特性时需要注意的问题

    下面是关于“Javascript的setTimeout()使用闭包特性时需要注意的问题”的详细讲解。 什么是setTimeout() setTimeout() 是 JavaScript 语言自带的一个定时器,通常用于在指定的时间间隔之后执行一段指定的代码。setTimeout() 函数的语法如下: setTimeout(func|code, delay); …

    JavaScript 2023年6月10日
    00
  • javascript 事件加载与预加载

    JavaScript 事件加载及预加载是前端开发中非常重要的一环。在页面的交互和性能优化方面起着至关重要的作用。接下来,我将为你讲解一下 JavaScript 事件加载与预加载的完整攻略。 什么是 JavaScript 事件加载? 在简单介绍 JavaScript 事件加载之前,先简单了解一下浏览器渲染页面的过程。 解析 HTML 结构 加载 CSS 加载 …

    JavaScript 2023年6月10日
    00
  • JavaScript的面向对象你了解吗

    JavaScript是一门基于原型的面向对象编程语言,也就意味着没有传统的类的概念,而是通过原型链的方式定义和继承对象。下面将会介绍如何使用JavaScript实现面向对象编程。 创建对象 在JavaScript中,我们可以通过对象字面量的方式来创建一个对象。对象字面量用 {} 表示,里面包含了若干个属性和函数。例如: const person = { na…

    JavaScript 2023年5月18日
    00
  • JavaScript入门教程(3) js面向对象

    这篇“JavaScript入门教程(3) js面向对象”教程,主要介绍了 JavaScript 的面向对象编程的基本概念和使用方法。在学习中,需要掌握以下几个方面的知识: 对象和属性:在 JavaScript 中,每个对象都由一组属性构成。属性可以是 JavaScript 原始类型的值,例如字符串、数字和布尔值。也可以是对象或函数,这些对象是用来描述一些相关…

    JavaScript 2023年5月18日
    00
  • JavaScrip String对象的方法

    下面是“JavaScript String对象的方法”的详细攻略。 String对象的介绍 在JavaScript中,字符串是一种基本的数据类型,由一个或多个字符组成,用来表示文字和文本数据。String对象是对JavaScript中字符串进行操作、处理和转换的对象。String对象拥有很多实用的方法,可以让我们对字符串进行各种操作和处理。 常用的Strin…

    JavaScript 2023年5月28日
    00
  • 使用vue-cli3+typescript的项目模板创建工程的教程

    下面是使用vue-cli3+typescript的项目模板创建工程的攻略。 准备工作:- 确保已正确安装node.js和npm- 通过npm安装vue-cli3:npm i -g @vue/cli 步骤1:创建一个新项目- 打开终端窗口,输入以下命令创建一个新的vue项目: vue create my-project 在选择项目类型时,选择 Manually…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部