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方法只搜索用户定义的属性。