学习如何使用 JavaScript 的 hasOwnProperty 方法

JavaScript 的hasOwnProperty方法用于检查给定对象是否具有特定属性。

hasOwnProperty方法检查的属性是相关对象的内部属性,也就是说,它必须是由用户定义的。

如果传递给hasOwnProperty的属性存在于对象上,则该方法返回true,否则返回false

示例 1:

在这个例子中,我们创建了person对象并添加了name属性,然后我们使用hasOwnProperty来验证这个属性是我们对象的一部分。

1var person = {
2    "name": "Brian",
3    "lastName": "Scott"
4};
5
6console.log( person.hasOwnProperty("name") );

出口:

1true

示例 2:

在此示例中,我们将声明一个名为car的对象并为其分配一个名为 door 的属性,因此我们可以使用hasOwnProperty来检查此属性。

1var car = {
2    "doors": 4,
3    "engine": 2.0,
4    "color": "black"
5};
6
7var hasDoor = car.hasOwnProperty("doors");
8
9console.log(hasDoor);

出口:

1true

示例 3:

在这里,我们将故意拼错对象的属性名称,以便hasOwnProperty方法返回false

1var shoppingCart = {
2    "fruits": true,
3    "bread": false
4};
5
6var hasFruits = shoppingCart.hasOwnProperty("fruites");
7
8console.log(hasFruits);

出口:

1false

为什么使用 hasOwnProperty 方法很重要?

让我们看看在 JavaScript 中使用hasOwnProperty方法检查属性是否存在于对象中的重要性。

JavaScript 中的一切都是对象。

没错,在 JavaScript 中创建的任何元素都被视为对象。数字、文本字符串、数组和任何其他 JavaScript 数据类型都从父对象继承属性。

示例 1:

JavaScript 中的数值数据类型被视为对象。

1var number = 10.22333;
2var otherNumber = number.toPrecision(3);
3
4console.log(otherNumber);

出口:

110.2

示例 2:

字符串数据类型也被视为对象。

1var name = "Peter Max";
2var char = name.charAt(2);
3
4console.log(char);

出口:

1t

示例 3:

甚至 JavaScript 中的数组也是对象。

1var cars = ["BMW", "Audi", "Aston Martin"];
2
3var carIndexNumber = cars.indexOf("BMW");
4
5console.log(carIndexNumber);

出口:

10

在前面的示例中,所有对象都从主对象 Object 继承属性。

JavaScript 中的“in”命令

新的JavaScript 程序员通常使用in命令来检查给定对象上是否存在属性。

例子:

 1var car = {
 2    "doors": 2,
 3    "engine": 1.2,
 4    "color": "yellow"
 5};
 6
 7if ("engine" in car) {
 8    console.log("true");
 9} else {
10    console.log("false");
11}

出口:

1true

问题是in命令很全面。它将搜索对象的所有属性。用户创建的属性和从父对象继承的属性都包含在检查中。

如果程序员碰巧只在对象属性存在的情况下运行一段代码,这可能会导致逻辑错误。

但是程序员想要检查对象的默认属性?还是用户创建的属性?

例子:

 1var car = {
 2    "doors": 2,
 3    "engine": 1.2,
 4    "color": "yellow"
 5};
 6
 7if ("toString" in car) {
 8    console.log("true");
 9} else {
10    console.log("false");
11}

出口:

1true

在前面的例子中,命令in返回true,也就是说,它假设我们的对象中存在toString属性,即使我们没有声明这个属性。

toString属性/方法继承自父对象。为避免这种混淆,请始终使用hasOwnProperty方法。

例子:

 1var car = {
 2    "doors": 2,
 3    "engine": 1.2,
 4    "color": "yellow"
 5};
 6
 7if ( car.hasOwnProperty("toString") ) {
 8    console.log("true");
 9} else {
10    console.log("false");
11}

出口:

1false

现在返回值为false。这是因为,正如我们之前看到的,hasOwnProperty方法只搜索用户定义的属性。