オブジェクト オブジェクトはプロパティの集合です。プロパティとは名前(キー)と値(バリュー)が対になったものです。 プロパティのキーには文字列またはSymbolが利用でき、値には任意のデータを指定できます。 また、1つのオブジェクトは複数のプロパティを持てるため、1つのオブジェクトで多種多様な値を表現できます。 今までも登場してきた、配列や関数などもオブジェクトの一種です。 JavaScriptには、あらゆるオブジェクトの元となるObjectというビルトインオブジェクトがあります。 ビルトインオブジェクトは、実行環境にあらかじめ定義されているオブジェクトのことです。 ObjectというビルトインオブジェクトはECMAScriptの仕様で定義されているため、あらゆるJavaScriptの実行環境で利用できます。 この章では、オブジェクトの作成や扱い方、Objectというビルトインオブジェクト
[ES2015] Map/Set JavaScriptでデータの集まり(コレクション)を扱うビルトインオブジェクトは、ObjectやArrayだけではありません。 この章では、ES2015で導入されたマップ型のコレクションであるMapと、セット型のコレクションであるSetについて学びます。 Map Mapはマップ型のコレクションを扱うためのビルトインオブジェクトです。 マップとは、キーと値の組み合わせからなる抽象データ型です。 他のプログラミング言語の文脈では辞書やハッシュマップ、連想配列などと呼ばれることもあります。 マップの作成と初期化 Mapオブジェクトをnewすることで、新しいマップを作成できます。 作成されたばかりのマップは何も持っていません。 そのため、マップが持つ要素の数を返すsizeプロパティは0を返します。 const map = new Map(); console.l
注記: undefinedとnullに対応するラッパーオブジェクトはありません。 注意点として、ラッパーオブジェクトは名前のとおりオブジェクトです。 そのため、次のようにtypeof演算子でラッパーオブジェクトを見ると"object"です。 // プリミティブの文字列は"string"型 const str = "文字列"; console.log(typeof str); // => "string" // ラッパーオブジェクトは"object"型 const stringWrapper = new String("文字列"); console.log(typeof stringWrapper); // => "object" プリミティブ型の値からラッパーオブジェクトへの自動変換 JavaScriptでは、プリミティブ型の値に対してプロパティアクセスするとき、自動で対応するラッパーオブ
追記 (2018/09/05) 現在では、 TypeScript 2.8 で導入された Conditional Types を利用したよりよい方法があり、これを使うと最後に書いた「この方法の制限」も克服できます。 上の記事の内容はかなり難易度が高いですが、これを理解しておくと Conditional Types への理解がかなり深まるので、おすすめです。(途中で僕のことにも言及してくれていて、ちょっと嬉しかったです) 追記終わり。 keyof の概要 issue: https://github.com/Microsoft/TypeScript/issues/1295 PR: https://github.com/Microsoft/TypeScript/pull/11929 PR の説明文を省略して簡単に示すと、以下のような機能。 interface Thing { name: strin
表題の通り。 今まではMixinがなかったので、泥臭く型チェックができない方法(文字列とか)でDIしていたが、 typescript 2.2.0からMixinに対応したので、DIを考察する。 Dependency Injectionとは Dependency Injectionとはその名の通り依存性を外から注入する仕組み。 なにが嬉しいかというと、クラス内部で依存しているはずのクラスを外部からコントロールできるようにすることで、 クラスの内部実装と外部への依存を疎結合にし、テストし易いクラスを作ることができる。 猿でも分かる! Dependency Injection: 依存性の注入 - Qiita Inversion of Control コンテナと Dependency Injection パターン DI for Typescript さて、Typescriptで上述のDependen
現在JavaScriptを用いて、関数型プログラミングを学ぼうと勉強中... 今回は、その第三弾 勘違いしがちな部分適用とカリー化について区別しつつ、 カリー化について理解を深めることを目標とする。 前回の記事はこちらから↓↓↓ 【JavaScript】即時関数, 無名関数, クロージャについて 【JavaScript】関数を使いこなす(高階関数, 再帰関数)
HTML5Conference 2017 Room A Deep Dive Into TypeScriptの発表資料です。
JavaScriptで画像処理などの重い計算をしているとどうしても気になるのがループの部分。実際の処理に加えてループの部分でのロスが気になり始めたので実際にどのループ方法が速いのか試してみました。 概要 0~9999999の長さ1000万の配列のすべてを足し合わせるという単純な計算を行います 配列は、各ループの前で常に初期化を行います。 ループはforまたはwhileを用います。foreachやforinは使いません。 v8(Node.js)、Chrome、Firefox、Safariで実験を行います 筆者が噂で聞いた5つのポイント(後述)を加味した計32種類のコードを自動生成し、実行します。 各プラットフォームで5回実行し、平均をとります。 ウェブブラウザではWebWorkerを用いて実行します。 結果は実行環境に左右されている可能性があります 環境 MacBook Air (11-in
もうだいぶ前からすでに私はクロージャを使っています。使い方を学びましたが、実際にクロージャがどう機能するのか、また、使うと隠れたところで実際に何が起きるのかを明確に理解しているとは言えませんでした。そもそも、クロージャとは一体何なのでしょうか。 ウィキペディア はあまり役に立ちません。クロージャはいつ生成され、いつ削除されるのでしょうか。どのように実装されるべきなのでしょうか。 "use strict"; var myClosure = (function outerFunction() { var hidden = 1; return { inc: function innerFunction() { return hidden++; } }; }()); myClosure.inc(); // returns 1 myClosure.inc(); // returns 2 myClos
実務未経験でプログラマとして入社して半年以上が経った。 コードレビューで指摘されたことを備忘録としてまとめておく。 自分なりにまとめたものなので、レビュアーが言いたかったこととニュアンスや解釈がずれている可能性はある。 初歩的な内容ばかりで我ながらうんざりする。 せっかく優秀な同僚ばかりなのだからもっと高度なことを学びたいが、こういう初歩的なことが出来ないのが俺の現状なのだから、仕方ない。 そもそもPullRequestを送ったこともなかったわけだし。入社初日は、一人でPullRequestの出し方を練習していた。 それを考えればまあ、こんなものだろうか。 当たり前のことをちゃんと当たり前に出来るようになって、早く、次のステージに進みたい。 PullRequest(PR) PRのタイトルは分かりやすいものに。必要に応じてチケットの番号なども入れる。 コミットやPRは出来るだけ粒度を細かくす
In Promise-based code, there are usually many callbacks, each one having a separate scope for variables. What if you want to share data between those callbacks? This blog post describes techniques for doing so. The problem # The following code illustrates a common problem with Promise callbacks: The variable connection (line A) exists in one scope, but needs to be accessed in other scopes (line B
This is not really a bug report and I certainly don't want TypeScripts type system being restricted due to this issue. However, I noticed that the type system in its current form (version 2.2) is turing complete. Turing completeness is being achieved by combining mapped types, recursive type definitions, accessing member types through index types and the fact that one can create types of arbitrary
はじめに 現在JavaScriptを学習中のJavaプログラマです。 既存の知識ベースを元にJavaScriptを体系的に学習しました。 そこで学習した事のうち、Javaとの差分を記録しました。 今後も知識が増えるたびに随時追記していきます。 本記事のECMAScriptのバージョンについて ECMAScriptはEcma internationalが仕様を策定するJavaScriptの標準です。 このECMAScriptに則ることでその仕様に準拠する環境での動作が保証されます。 Babelといったトランスパイラの導入も含め、ES6の構文についての記事も別に書こうと考えています。 今回は、ES5までのJavaScriptについてまとめています。 ECMAScript5のstrict mode コードの先頭行に以下のディレクティブを書くと、strict modeとなります。 サポートされてい
If your JavaScript is a mess, frameworks can only do so much to help. No matter what framework, "compiles-to-JS" language, or library you use, bugs and performance concerns will always be an issue if the underlying quality of your JavaScript is poor. With this hands-on guide, you’ll learn how test and refactor your existing code to help reduce complexity, improve readability, and gain confidence i
Redux isn't slow, you're just doing it wrong - An optimization guide It's not very obvious how to optimize react applications that use Redux. But it's actually fairly straightforward. Here's a short guide, along with a few examples. When optimizing applications that use Redux with react, I often hear people saying that Redux is slow. In 99% of cases, the cause for bad performance (this goes for an
Well… okay, just don’t unsubscribe quite so much. I’m often enlisted to help someone debug an issue with their RxJS code or figure out how to structure an app that is composing a lot of async with RxJS. When doing so, I generally see the same thing pop up over and over again, people keeping handles to tons and tons of subscription objects. Developers will invariably make 3 HTTP requests with an Ob
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く