| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「JavaScript」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の17版が非表示)
5行目: 5行目:
 
==[[言語]]==
 
==[[言語]]==
  
 +
==モダンJavaScript==
  
 +
===変数宣言===
 +
*const : 再代入不可
 +
*let : 変数宣言、ブロックスコープ、同名変数監視
 +
*var :  変数宣言
  
====let宣言子====
+
===リテラル表現===
*ECMAScript6から導入
+
====テンプレート文字列====
*ブロックスコープのローカル変数を宣言
+
*文字列をバッククォートでくくる
 +
*途中の改行も可
 +
<pre>
 +
const name = 'Yagi';
 +
const message = `Hello. ${name}`;
 +
</pre>
  
 +
===アロー関数====
 +
*関数リテラルをより簡単にあらわす
 +
<pre>
 +
(arg,・・・) => {statement}
 +
</pre>
  
====const宣言子====
+
*以下の2つは意味的にはほぼ等価
*ECMAScript6から導入
+
<pre>
*ブロックスコープの再代入できないローカル変数(定数)を宣言する。
+
function fun(arg) {
*初期化必須
+
    return "x";
 +
}
  
 +
const fun = (arg) => {
 +
    return "x";
 +
}
 +
</pre>
  
 +
*関数本体が1文ならブロックを省略できる
 +
*式の値がそのまま戻り値となるのでreturnも省略できる
 +
<pre>
 +
const fun = (arg) => "x";
 +
</pre>
 +
*引数が1つの場合、カッコも省略できる
 +
<pre>
 +
const fun = arg = > "x";
 +
</pre>
 +
 +
*引数がない場合、カッコは省略できない
 +
<pre>
 +
const fun = () => "x";
 +
</pre>
 +
===オブジェクトリテラルの簡易構文===
 +
 +
====変数と同名のプロパティ====
 +
*プロパティと変数名が等しい場合は、値の指定を省略できる
 +
<pre>
 +
const name = 'yagi'
 +
const age = 52;
 +
 +
const me = { name, age };
 +
</pre>
 +
 +
====メソッドの簡易構文====
 +
*メソッドも簡易に表せる。
 +
*greet : function() {} -> greet() {}
 +
<pre>
 +
const person = {
 +
    name : 'yagi',
 +
    greet() {
 +
        "Hello";
 +
    }
 +
}
 +
</pre>
 +
 +
====プロパティ名の動的生成(算出プロパティ名)====
 +
*プロパティ名をブラケットで括ることで値から生成できる
 +
<pre>
 +
let i = 0;
 +
const hoge = {
 +
    [`no${i++}`] : '#1',
 +
    [`no${i++}`] : '#2',
 +
    [`no${i++}`] : '#3'
 +
}
 +
</pre>
 +
 +
====分割代入====
 +
*配列
 +
<pre>
 +
const list = [1,2,3];
 +
const [x,y,z] = list;
 +
 +
// 明示されない値を取得には...を使う
 +
const [x, ...etc] = list;
 +
</pre>
 +
*オブジェクト
 +
<pre>
 +
const me = {
 +
    name = 'yagi';
 +
    addr = 'aichi';
 +
    age = 52;
 +
};
 +
 +
const { name, addr, note = 'default value' } = me;
 +
// 別名 name -> myname
 +
const { name: myname } = me;
 +
// 明示されない値を取得には...を使う
 +
const { name, ...etc } = me;
 +
</pre>
 +
 +
*入れ子オブジェクト
 +
<pre>
 +
const me = {
 +
    name : 'yagi';
 +
    addr : {
 +
        pref : 'aichi',
 +
        city: 'asahi'
 +
    }
 +
};
 +
 +
const { addr : { city } } = me;
 +
// city = 'asahi'
 +
</pre>
 +
 +
====引数規定値、可変長引数====
 +
*引数規定値
 +
<pre>
 +
function fun(a = 1, b = 1, c = 1) {}
 +
 +
// 以下も可
 +
function fun (a = 1, b = a, c = a ) {}
 +
</pre>
 +
 +
*可変長引数:引数の前に...を付与することで配列として取得できる
 +
<pre>
 +
function fun(...nums) {
 +
    console.log(nums.length); 
 +
}
 +
 +
fun(1,2,3); // print 3
 +
</pre>
 +
 +
*スプレッド構文による引数の展開
 +
<pre>
 +
console.log(...[1,2.3]);  // 1,2,3
 +
</pre>
 +
 +
*分割代入によるオブジェクト引数の分解
 +
<pre>
 +
const me = { name: 'yagi', age: 52 };
 +
const f = ({name, age}) => console.log(`${name}`);
 +
f(me); // yagi
 +
</pre>
 +
====nullチェック====
 +
*Optional Chaining演算子(?.)
 +
<pre>
 +
let str = null;
 +
str?.substring(1); // undefined => 通常Error
 +
</pre>
 +
 +
*null合体演算子
 +
<pre>
 +
let str = null;
 +
str ?? 'default value';  // default value
 +
</pre>
 +
===モジュール===
 +
*JavaScriptのモジュールは一つのファイルとしてまとめるのが基本
 +
*モジュール配下のメンバーは規定でモジュール外部には非公開
 +
*モジュール外部からアクセスするには、exportキーワードを付与する必要がある
 +
 +
====定義済みモジュールへのアクセス====
 +
<pre>
 +
&lt;script type="module" src="mod.js"&gt;&lt;/script&gt;
 +
</pre>
 +
 +
*import { member, ... } from module
 +
<pre>
 +
import { func1, func2 } from './mod.js';
 +
</pre>
 +
 +
*nodeコマンドから実行の場合、package.jsonで明示的にモジュール機能を有効化
 +
<pre>
 +
{
 +
    "type": "module"
 +
}
 +
</pre>
 +
 +
*その他
 +
<pre>
 +
import { func1 as f1 } form './mod.js'; // 別名付与
 +
import * as md from './mod.js'; // as でモジュール別名を定義し全体をimport
 +
import f1 from './mod.js'; // export default (モジュール1つにつき一つだけ設定できる規定のexport)をimport
 +
import f1 {f2, f3} from './mod.js'; // 規定とその他をまとめてimport
 +
</pre>
 +
 +
*動的import
 +
指定されたモジュールを非同期にimportし出来次第thenコールバックを実行
 +
<pre>
 +
import('./mod.js').then)(md => {
 +
    md.f1();
 +
});
 +
</pre>
  
 
==[[リンク]]==
 
==[[リンク]]==
104行目: 288行目:
 
*[[ECMA Script]]
 
*[[ECMA Script]]
 
*[[Java]]script 再入門
 
*[[Java]]script 再入門
 +
 +
[[category:プログラミング言語]]

2024年9月27日 (金) 11:14時点における最新版

| Node.js | TypeScript | Angular | AngularJS | React | Dojo | DOM | jQuery | prototype.js | 初めて |

JavaScript

言語

モダンJavaScript

変数宣言

  • const : 再代入不可
  • let : 変数宣言、ブロックスコープ、同名変数監視
  • var : 変数宣言

リテラル表現

テンプレート文字列

  • 文字列をバッククォートでくくる
  • 途中の改行も可
  1. const name = 'Yagi';
  2. const message = `Hello. ${name}`;

アロー関数=

  • 関数リテラルをより簡単にあらわす
  1. (arg,・・・) => {statement}
  • 以下の2つは意味的にはほぼ等価
  1. function fun(arg) {
  2. return "x";
  3. }
  4.  
  5. const fun = (arg) => {
  6. return "x";
  7. }
  • 関数本体が1文ならブロックを省略できる
  • 式の値がそのまま戻り値となるのでreturnも省略できる
  1. const fun = (arg) => "x";
  • 引数が1つの場合、カッコも省略できる
  1. const fun = arg = > "x";
  • 引数がない場合、カッコは省略できない
  1. const fun = () => "x";

オブジェクトリテラルの簡易構文

変数と同名のプロパティ

  • プロパティと変数名が等しい場合は、値の指定を省略できる
  1. const name = 'yagi'
  2. const age = 52;
  3.  
  4. const me = { name, age };

メソッドの簡易構文

  • メソッドも簡易に表せる。
  • greet : function() {} -> greet() {}
  1. const person = {
  2. name : 'yagi',
  3. greet() {
  4. "Hello";
  5. }
  6. }

プロパティ名の動的生成(算出プロパティ名)

  • プロパティ名をブラケットで括ることで値から生成できる
  1. let i = 0;
  2. const hoge = {
  3. [`no${i++}`] : '#1',
  4. [`no${i++}`] : '#2',
  5. [`no${i++}`] : '#3'
  6. }

分割代入

  • 配列
  1. const list = [1,2,3];
  2. const [x,y,z] = list;
  3.  
  4. // 明示されない値を取得には...を使う
  5. const [x, ...etc] = list;
  • オブジェクト
  1. const me = {
  2. name = 'yagi';
  3. addr = 'aichi';
  4. age = 52;
  5. };
  6.  
  7. const { name, addr, note = 'default value' } = me;
  8. // 別名 name -> myname
  9. const { name: myname } = me;
  10. // 明示されない値を取得には...を使う
  11. const { name, ...etc } = me;
  • 入れ子オブジェクト
  1. const me = {
  2. name : 'yagi';
  3. addr : {
  4. pref : 'aichi',
  5. city: 'asahi'
  6. }
  7. };
  8.  
  9. const { addr : { city } } = me;
  10. // city = 'asahi'

引数規定値、可変長引数

  • 引数規定値
  1. function fun(a = 1, b = 1, c = 1) {}
  2.  
  3. // 以下も可
  4. function fun (a = 1, b = a, c = a ) {}
  • 可変長引数:引数の前に...を付与することで配列として取得できる
  1. function fun(...nums) {
  2. console.log(nums.length);
  3. }
  4.  
  5. fun(1,2,3); // print 3
  • スプレッド構文による引数の展開
  1. console.log(...[1,2.3]); // 1,2,3
  • 分割代入によるオブジェクト引数の分解
  1. const me = { name: 'yagi', age: 52 };
  2. const f = ({name, age}) => console.log(`${name}`);
  3. f(me); // yagi

nullチェック

  • Optional Chaining演算子(?.)
  1. let str = null;
  2. str?.substring(1); // undefined => 通常Error
  • null合体演算子
  1. let str = null;
  2. str ?? 'default value'; // default value

モジュール

  • JavaScriptのモジュールは一つのファイルとしてまとめるのが基本
  • モジュール配下のメンバーは規定でモジュール外部には非公開
  • モジュール外部からアクセスするには、exportキーワードを付与する必要がある

定義済みモジュールへのアクセス

  1. <script type="module" src="mod.js"></script>
  • import { member, ... } from module
  1. import { func1, func2 } from './mod.js';
  • nodeコマンドから実行の場合、package.jsonで明示的にモジュール機能を有効化
  1. {
  2. "type": "module"
  3. }
  • その他
  1. import { func1 as f1 } form './mod.js'; // 別名付与
  2. import * as md from './mod.js'; // as でモジュール別名を定義し全体をimport
  3. import f1 from './mod.js'; // export default (モジュール1つにつき一つだけ設定できる規定のexport)をimport
  4. import f1 {f2, f3} from './mod.js'; // 規定とその他をまとめてimport
  • 動的import

指定されたモジュールを非同期にimportし出来次第thenコールバックを実行

  1. import('./mod.js').then)(md => {
  2. md.f1();
  3. });

リンク

Promiseベースのhttpクライアント(axios)

リファレンス

DHTML

入門

初めてのJavaScript

JavaScript メモ

DOM

jQuery

Tips

ウィンドウ操作

画面要素

画像

スタイル

文字列操作

正規表現

配列

オブジェクト

トラブル

Ajax

その他