WEBVTT

1
00:00:00.000 --> 00:00:00.931
こんにちは。

2
00:00:00.931 --> 00:00:04.501
今回はオブジェクト・ハズ・オウンを紹介します。

3
00:00:04.501 --> 00:00:12.883
これは、オブジェクト自身が指定したキーを持っているかどうかを、トゥルーかフォルスかで答える静的メソッドです。

4
00:00:12.883 --> 00:00:20.954
ここでいう自身とは、そのオブジェクトに直接書かれたプロパティのことで、継承で受け継いだものは含みません。

5
00:00:20.954 --> 00:00:28.016
この動画では、書き方と引数と戻り値、記事の基本例と境界例、イン演算子や従来の書き方との違い、

6
00:00:28.016 --> 00:00:35.079
シンボルキーや例外の注意点、そして設定の有無を区別する実例まで、実行結果と一緒に学びます。

7
00:00:35.079 --> 00:00:41.908
キーの有無を確かめる場面は、設定や外部データの処理など、日常のコードに数多く登場します。

8
00:00:41.908 --> 00:00:43.882
まず動作環境を確認します。

9
00:00:43.882 --> 00:00:49.805
オブジェクト・ハズ・オウンは比較的新しいメソッドで、クロームとエッジでは九十三以降、

10
00:00:49.805 --> 00:00:55.728
ファイアーフォックスでは九十二以降、サファリでは十五・四以降で使えます。

11
00:00:55.728 --> 00:01:00.132
ノード・ジェイエスでは十六・九・ゼロ以降に対応しています。

12
00:01:00.132 --> 00:01:04.536
記事の互換性情報はエムディーエヌのデータに基づく目安です。

13
00:01:04.536 --> 00:01:11.066
古い環境では使えない場合があるので、公開するコードでは対象環境を先に確認してください。

14
00:01:11.066 --> 00:01:16.685
追加の読み込みは不要で、関数として備わっていることを実機でも確認済みです。

15
00:01:16.685 --> 00:01:22.760
特にサファリは対応開始が少し遅いため、古い端末も対象にする場合は注意が必要です。

16
00:01:22.760 --> 00:01:24.215
書き方を確認します。

17
00:01:24.215 --> 00:01:30.761
オブジェクトと書き、続けてハズ・オウンと書いて、カッコの中に調べたい対象とキーを渡します。

18
00:01:30.761 --> 00:01:35.997
第一引数が対象のオブジェクト、第二引数が文字列またはシンボルのキーです。

19
00:01:35.997 --> 00:01:41.961
戻り値はブール値で、自身のプロパティがあればトゥルー、なければフォルスが返ります。

20
00:01:41.961 --> 00:01:46.471
スライドの例では、名前を持つオブジェクトについて、名前のキーはトゥルー、

21
00:01:46.471 --> 00:01:50.980
年齢のキーはフォルスになることを実機で確認しました。

22
00:01:50.980 --> 00:01:55.489
対象のオブジェクト自体は変更されず、調べるだけのメソッドです。

23
00:01:55.489 --> 00:02:01.308
数値のキーは文字列に変換されて判定されるため、配列の添字もそのまま調べられます。

24
00:02:01.308 --> 00:02:02.771
記事の基本例を見ます。

25
00:02:02.771 --> 00:02:09.953
値がアンディファインドのプロパティを持つオブジェクトを用意し、バリューというキーがあるかを調べるコードです。

26
00:02:09.953 --> 00:02:13.809
実行結果はトゥルーで、ノードの実機結果とも一致しています。

27
00:02:13.809 --> 00:02:19.927
ここが大切なポイントで、このメソッドは値の中身ではなく、キーが存在するかどうかだけを見ます。

28
00:02:19.927 --> 00:02:24.981
だから、値がアンディファインドでも、キーが書かれていればトゥルーになります。

29
00:02:24.981 --> 00:02:31.364
逆に、キーが省略されていればフォルスになるので、設定されたのか省略されたのかを区別できるのです。

30
00:02:31.364 --> 00:02:37.216
手元のコンソールでキーを消したり値を変えたりしながら、結果の変化も確かめてみてください。

31
00:02:37.216 --> 00:02:39.488
記事の境界条件の例を見ます。

32
00:02:39.488 --> 00:02:48.576
オブジェクト・クリエイトで、インヘリテッドというプロパティを持つオブジェクトを継承した子オブジェクトを作ります。

33
00:02:48.576 --> 00:02:55.878
この子に対してハズ・オウンで調べると、結果はフォルスで、記事の期待出力とも一致しています。

34
00:02:55.878 --> 00:03:01.233
継承しただけのプロパティは、自身のプロパティとは数えないためです。

35
00:03:01.233 --> 00:03:05.777
一方、同じキーをイン演算子で調べるとトゥルーになります。

36
00:03:05.777 --> 00:03:10.970
イン演算子は継承まで含めて探すので、結果が正反対になる好例です。

37
00:03:10.970 --> 00:03:15.352
どちらを使うかは、自身だけを見たいかで選んでください。

38
00:03:15.352 --> 00:03:21.356
継承を数えるかどうかで答えが変わる代表例として、記事が用意した境界例です。

39
00:03:21.356 --> 00:03:24.399
イン演算子との違いをもう少し詳しく見ます。

40
00:03:24.399 --> 00:03:29.616
空のオブジェクトには、トゥー・ストリングという名前を直接書いていません。

41
00:03:29.616 --> 00:03:35.123
しかし、すべてのオブジェクトはプロトタイプを通じてこの名前を継承しています。

42
00:03:35.123 --> 00:03:41.065
そのため、イン演算子ではトゥルーになりますが、ハズ・オウンではフォルスになります。

43
00:03:41.065 --> 00:03:43.818
スライドの結果は実機でも確認済みです。

44
00:03:43.818 --> 00:03:47.514
つまり、ハズ・オウンはプロトタイプチェーンをたどらず、そのオブジェクト自身だけを見る、

45
00:03:47.514 --> 00:03:51.209
というわけです。

46
00:03:51.209 --> 00:03:55.122
継承を混ぜたくない判定では、この違いが重要になります。

47
00:03:55.122 --> 00:03:59.904
逆に継承も含めて確認したい場面では、イン演算子を選ぶのが適切です。

48
00:03:59.904 --> 00:04:02.647
従来の書き方との違いも押さえます。

49
00:04:02.647 --> 00:04:10.070
以前は、各オブジェクトが持つハズ・オウン・プロパティというメソッドを呼ぶ方法が一般的でした。

50
00:04:10.070 --> 00:04:19.106
しかし、オブジェクト自身に同名のキーが書かれていると、そのメソッドが上書きされて誤った答えが返る恐れがあります。

51
00:04:19.106 --> 00:04:25.238
また、プロトタイプを持たないオブジェクトでは、そのメソッド自体が呼べません。

52
00:04:25.238 --> 00:04:29.917
オブジェクト・ハズ・オウンは、オブジェクト側に用意された静的メソッドとして外から呼ぶので、

53
00:04:29.917 --> 00:04:34.597
こうした影響を受けません。

54
00:04:34.597 --> 00:04:39.760
スライドの例でも、正しくトゥルーが返ることを実機で確認しました。

55
00:04:39.760 --> 00:04:45.892
新しく書くコードでは、こちらに書き方を統一すると意図が伝わりやすくなります。

56
00:04:45.892 --> 00:04:48.486
キーの種類についても確認します。

57
00:04:48.486 --> 00:04:52.540
第二引数には文字列だけでなく、シンボルも渡せます。

58
00:04:52.540 --> 00:05:02.107
スライドの一行目では、シンボルをキーに持つオブジェクトを、同じシンボルで調べてトゥルーになることを実機で確認しました。

59
00:05:02.107 --> 00:05:10.377
ただし、同じ説明文で新しく作った別のシンボルではフォルスになるので、必ず同じシンボルを使ってください。

60
00:05:10.377 --> 00:05:17.349
配列もオブジェクトの一種なので、添字やレングスといった自身のプロパティを調べられます。

61
00:05:17.349 --> 00:05:24.159
また、列挙できないように設定した隠れたプロパティでも、存在すればトゥルーになります。

62
00:05:24.159 --> 00:05:29.024
キーの型を問わず、同じ書き方で判定できる点も利点の一つです。

63
00:05:29.024 --> 00:05:30.110
注意点を見ます。

64
00:05:30.110 --> 00:05:38.254
もっとも大切なのは、第一引数にヌルやアンディファインドを渡すと、フォルスではなくタイプ・エラーの例外が発生することです。

65
00:05:38.254 --> 00:05:45.855
存在しないキーを調べた場合はフォルスが返るだけなので、対象そのものが空でないかを先に確認する流れにしてください。

66
00:05:45.855 --> 00:05:49.384
もう一つ、文字列キーは大文字と小文字が区別されます。

67
00:05:49.384 --> 00:05:55.493
スライドのように、名前のキーを大文字始まりで探すとフォルスになることを実機で確認しました。

68
00:05:55.493 --> 00:05:58.886
スペルやキーの表記ゆれにも注意して使ってください。

69
00:05:58.886 --> 00:06:04.044
対象がオブジェクトかを先に確かめる一文を添えると、安全性が大きく上がります。

70
00:06:04.044 --> 00:06:07.828
実務に近い実例として、設定オブジェクトの扱いを見ます。

71
00:06:07.828 --> 00:06:14.695
タイムアウトというキーにアンディファインドが明示された設定では、ハズ・オウンはトゥルーを返します。

72
00:06:14.695 --> 00:06:19.600
これは、利用者があえて未設定の値で上書きした、と解釈できるサインです。

73
00:06:19.600 --> 00:06:23.384
一方、リトライズというキーがなければフォルスになるので、そこにだけデフォルト値を補う、

74
00:06:23.384 --> 00:06:27.168
という処理が書けます。

75
00:06:27.168 --> 00:06:30.251
スライドの結果はどちらも実機で確認済みです。

76
00:06:30.251 --> 00:06:37.399
値だけを見ると、省略と明示的なアンディファインドは同じに見えますが、キーの有無でなら区別できるのです。

77
00:06:37.399 --> 00:06:42.304
デフォルト値との組み合わせ処理でも、同じ考え方がそのまま応用できます。

78
00:06:42.304 --> 00:06:43.217
まとめです。

79
00:06:43.217 --> 00:06:51.894
オブジェクト・ハズ・オウンは、オブジェクト自身がキーを持つかどうかを、トゥルーかフォルスかで返す静的メソッドです。

80
00:06:51.894 --> 00:06:53.873
判断のポイントは三つです。

81
00:06:53.873 --> 00:06:59.810
まず、継承したプロパティはフォルスになるので、自身だけを見たいときに使うこと。

82
00:06:59.810 --> 00:07:06.965
次に、値がアンディファインドでもキーがあればトゥルーになり、設定の省略と明示を区別できること。

83
00:07:06.965 --> 00:07:14.271
そして、従来のメソッドより安全ですが、対象がヌルの場合は例外になるので事前確認を添えることです。

84
00:07:14.271 --> 00:07:20.969
まずは記事の基本例と境界例を実行し、キーを変えて結果を予測してから確かめてみてください。

85
00:07:20.969 --> 00:07:26.754
次に学ぶオブジェクト・アサインと組み合わせると、活用の幅がさらに広がります。

86
00:07:26.754 --> 00:07:28.124
お疲れさまでした。
