Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript を書き始める前に知っておきたい JavaScript のこと #05
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kotaro Chiba
September 26, 2020
Technology
1
520
JavaScript を書き始める前に知っておきたい JavaScript のこと #05
JavaScript のデータ型を見てみようという内容。今回はオブジェクトの解説です。
Kotaro Chiba
September 26, 2020
Tweet
Share
More Decks by Kotaro Chiba
See All by Kotaro Chiba
JavaScript を書き始める前に知っておきたい JavaScript のこと #04
uruha
1
570
JavaScript を書き始める前に知っておきたい JavaScript のこと #03
uruha
1
450
DMM.com のフロントエンド 今・今後 / Think ! FrontEnd #01
uruha
1
1.6k
JavaScript を書き始める前に知っておきたい JavaScript のこと #02
uruha
1
1.4k
JavaScript を書き始める前に知っておきたい JavaScript のこと
uruha
1
750
JavaScript を書き始める前にやっておきたいこと / Kanazawa.js meetup #1
uruha
1
1.2k
JConf JP Sponsor talk DMM.com / TECH VISION に向けての取り組み
uruha
1
500
Other Decks in Technology
See All in Technology
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
550
2026年はチャンキングを極める!
shibuiwilliam
9
1.9k
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
360
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
240
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
0
290
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
280
しろおびセキュリティへ ようこそ
log0417
0
280
入社1ヶ月でデータパイプライン講座を作った話
waiwai2111
1
220
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
0
130
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
130
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
420
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
410
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Unsuck your backbone
ammeep
671
58k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
96
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
120
How to Talk to Developers About Accessibility
jct
2
120
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
Transcript
JavaScript を書き始める前に知 っておきたい JavaScript のこ と #05 Kanazawa.js Remote Meetup
#06 千葉 弘太郎 1 1
千葉 弘太郎(ちば こうたろう) Kotaro Chiba Twitter: @ur_uha Github: uruha Work:
DMM.com LLC 2 2
前回 JavaScript を書き始める前に知っておきたい JavaScript のこと #04 JavaScript の データ型 について知ろう(プリミティブ型
編) ! 3 3
今回 JavaScript の データ型 について知ろう(オブジェクト 編) ! 4 4
おさらい 5 5
プリミティブ型 String Number Boolen Undefined Null Symbol (ES6~) BigInt (ES10~
new) Object <= 今⽇はこれ 6 6
オブジェクト (複合型) 1つ以上のプリミティブ値を格納できるレイヤ。 プリミティブ値と違い、メモリサイズを特定できない。 複合オブジェクト 参照型 とも呼ばれる。 7 7
const myObject = { num: 1, text: 'Yes! プリキュア!', isTrue:
false, nullpo: null, // ... }; 8 8
「複合」はわかるけど、なぜ「参照」 9 9
const obj_01 = {}; const obj_02 = obj_01; obj_01.foo =
1; console.log(obj_01.foo, obj_02.foo); // => 1, 1 10 10
11 11
⽣成されたオブジェクトを操作する場合、 オブジェクトのコピーは値をコピーするのではなく、 「参照先」をコピーする。 cf. プリミティブ値は値そのものが渡される 12 12
また、オブジェクトのプロパティは動的に更新が可能。 参照先を共有しているオブジェクト⾃体のプロパティが更新 されると全てのオブジェクトのプロパティが更新される。 13 13
オブジェクト⽣成時の特徴 14 14
オブジェクトの⽣成時には constructor プロパティにア クセスできるようになる(プリミティブ値も同じ) constructor プロパティの特定は instanceof 演算⼦ で判定できる 15
15
オブジェクトにはネイティブコンストラクタを持つオブジェク トがいくつか存在する。 16 16
Object Array Funciton Date Error RegExp 17 17
const obj = new Object(); const arr = new Array();
const date = new Date(); console.log(obj instanceof Object); console.log(arr instanceof Array); console.log(date instanceof Date); // => 全て true が返る obj.constructor === Object; arr.constructor === Array; date.constructor === Date; // => 上記と結果が同じ ネイティブコンストラクタはリテラルでも⽣成できる。 18 18
プリミティブ値とネイティブコンストラクタは別物。 配列などはプリミティブ値でないため注意!(意外に知らない で判定を⾏う⼈が多い) typeof Array は存在しない 19 19
ただ、 instanceof は iframe では動作しないため、 Array などの判定は instanceof より Array.isArray()
が推奨されている。 20 20
⽐較について 21 21
オブジェクト⾃体の⽐較は、⽐較対象のオブジェクトが「同じ 型」で「同じ(プロパティの)値」を持っているかどうかで判 断できない。 const cf_01 = { foo: 'bar' };
const cf_02 = { foo: 'bar' }; cf_01 === cf_02 // => false const cf_03 = cf_01; // 参照先が同じものは⽐較(というか同じなので)できる cf_03 === cf_01 // => true 22 22
つまりオブジェクトそのものが型も値も同じであるかの判定は 別の⽅法を使⽤する必要がある。 23 23
代替法 その1 isEqual const stooge = { name: 'moe', luckyNumbers:
[13, 27, 34] }; const clone = { name: 'moe', luckyNumbers: [13, 27, 34] }; stooge === clone; // => false _.isEqual(stooge, clone); // => true 24 24
代替法 その2 assert.deepStrictEqual const stooge = { name: 'moe', luckyNumbers:
[13, 27, 34] }; const clone = { name: 'moe', luckyNumbers: [13, 27, 34] }; assert.deepStrictEqual(stooge, clone); // => OK 25 25
ビルトインではオブジェクトの⽐較するためのメソッドや演算 ⼦はないため、ライブラリなどを使う。 TypeScript を使⽤している場合はオブジェクト⾃体のIFを型で 定義できるので Lint やコンパイル時に検出できる。 26 26
まとめ 1つ以上のプリミティブ値を格納できるレイヤ 複製する場合は参照渡しになる プロパティは動的に変更が可能 ⽣成されたオブジェクトはコンストラクタプロパティにアク セスができる コンストラクタの判定は instanceof で検出できる オブジェクトそのものは⽐較はできない
別途ライブラリのメソッドなどを使⽤する 27 27
次回 どうしようかな... 28 28