Paepoi » JavaScript Tips » JavaScript その他
JavaScript その他
# 最終更新日 2022.10.24
Gjs での覚書です、環境によっては print を console.log で全置換してください
配列
indexOf, lastIndexOf, includes は文字列と同様に使えます
// 配列宣言 let array = ['YAMAHA', 'HONDA', 'SUZUKI', 'KAWASAKI']; // 取り出し、先頭はゼロ print(array[0]); //=> YAMAHA // 追加 array.push('MAZDA'); // 前方に追加 array.unshift('TOYOTA'); // 書き換え array[1] = 'SUBARU'; // 削除 array.splice(4, 1); // 4 番目から 1 つ分取り除く // 合体、書き換えではなく戻り値なので注意 array = array.concat(['HINO', 'ISUZU']) // 要素数 print(array.length); // 含まれている? if (array.includes('HONDA')) { print('あるよ'); } // ループ for (let s of array) { print(s); } /* output 7 あるよ TOYOTA SUBARU HONDA SUZUKI MAZDA HINO ISUZU */ // [3, 3, 3, 3, 3] になる let aa = new Array(5).fill(3); // ['日', '本', '語', ' ', 'O', 'K'] になる let bb = Array.from('日本語 OK');
連想配列
Python と同様の以下が長い間使われてきたけどコレは object なので色々不便 var map = {'TOYOTA': 'LEXUS', 'HONDA': 'ACURA'}; 特に for 文が挿入順にはならないのが困る ES6 で Map が追加されたのでそちらを今後は使いましょう
let map = new Map(); // 追加 map.set('SUZUKI', 'Hayabusa'); map.set('HONDA', 'CBR1000RR'); map.set('YAMAHA', 'XMAX'); map.set('KAWASAKI', 'Z900RS'); // 取り出し、objeect のように添字は使えない @ print(map['SUZUKI']); print(map.get('SUZUKI')); // 書き換え map.set('HONDA', 'Super Cub'); // 削除 map.delete('YAMAHA'); // 値の取り出し if (map.has('KAWASAKI')) { let n = map.size; let k = map.get('KAWASAKI'); print(`${n} 個のエントリー\n${k} が含まれています`) } // ループ for (let [key, val] of map) { print(`${key} は ${val} です`); } /* output 3 個のエントリー Z900RS が含まれています SUZUKI は Hayabusa です HONDA は Super Cub です KAWASAKI は Z900RS です */
let, const
let 宣言された変数はブロック内スコープになる もう var を使うのはヤメにしましょう
let letStr = 1; var varStr = 1; // 同一ブロックでの多重定義は Error になる //let letStr = 4; // var 宣言はブロック内スコープにならない if (true) { let letStr = 2; var varStr = 2; let letBlock = 3; var varBlock = 3; } print(`letStr=${letStr} varStr=${varStr} varBlock=${varBlock}`); //=> letStr=1 varStr=2 varBlock=3 try { print(letBlock); } catch { print('letBlock は参照できません'); } // const は他の言語と同様に変更できない定数になる // 関係ないけど Swift では定数が let なのはややこしい const SUZUKI = 'カッコイイ'; try { SUZUKI = 'カッコワルイ'; } catch { print('SUZUKI のバイクはカッコイイです'); }
非同期で実行
色々な書き方があるけど非同期にしたいだけなら以下が一番簡単
Promise.resolve(null) .then((value)=> { print('いーち'); }) .then((value)=> { print('にー'); return 'さーん'; }) .then((value)=> { print(value); return 'だぁ!!!' }) .then((value)=> { print(value); }) .catch(function (error) { print(error); }); print('いくぞー'); /* output いくぞー いーち にー さーん だぁ!!! */
三項演算子
ワンライナーのためではなく普通に便利なんです
let location = 'sftp://sasakima-nao@macbookair.local/Users/sasakima-nao'; /* 普通には以下のように書くけど何か無駄な代入が気になる こういう場合に三項演算子を使うとスマートかつ読みやすいコードになる let res = 'Path 名'; if (location.includes('//')) { res = 'URI'; } */ let res = location.includes('//') ? 'URI' : 'Path 名'; print(`引数は ${res} です`);
Copyright(C) sasakima-nao All rights reserved 2002 --- 2023.