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という名前のオブジェクトを宣言し、それにdoorsというプロパティを割り当てるので、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メソッドを使用することが重要なのはなぜですか?
hasOwnPropertyメソッドを使用して、JavaScriptのオブジェクト内にプロパティが存在するかどうかを確認することの重要性を見てみましょう。
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メソッドがユーザー定義のプロパティのみを検索するためです。