L'Isola di Niente
L'Isola di Niente » JavaScript Tips » JavaScript 全般の覚書

JavaScript 全般の覚書

# 最終更新日 2017.08.19

JavaScriptCore(Apple), SpiderMonkey(Mozilla), V8(Google)で確認
Nashorn(Oracle) でもほぼ同様ですが ES6 部は JAVA8 を待ちましょう

文字列操作
// Nashorn では const, let が使えないようです
let STR = "漢字も一文字だもん!";

let a = STR.slice(3, 6);     // (開始位置 ,終了位置)
let c = STR.substring(3, 6); // (開始位置 ,終了位置)
let b = STR.substr(3, 3);    // (開始位置 ,切り出す長さ)

//print(a, b, c);
//console.log(a, b, c);
//document.write(a, b, c);

//=> 一文字 一文字 一文字

let a = STR.slice(3);     // (開始位置のみ指定)
//=> 一文字だもん!


// 検索
STR.startsWith("漢字"); // 最初
//=>true
STR.endsWith("もん!"); // 最後
//=>true
STR.indexOf("も"); // 出現(最初)
//=>2
STR.lastIndexOf("も"); // 出現(最後)
//=>7
STR.indexOf("もん") != -1; // 含まれている?
//=>true
STR.replace("もん", "モン"); // 変換
//=>漢字も一文字だモン!
STR.split("も"); // 配列化
//=>["漢字", "一文字だ", "ん!"]

"ABCdef".toLowerCase();
//=>abcdef
"ABCdef".toUpperCase();
//=>ABCDEF


// 前後の空白や最後の余計な改行を取り除く
let b = "  aa bb cc   \n";
b.trim();
//=>"aa bb cc"


// 変換
let str = "文字列をUTF-8に";
let utf8str = unescape(encodeURIComponent(str));
let utf16str = decodeURIComponent(escape(utf8str));

文字列と配列の変換
// 配列を文字列に
let s = ['one', 'tow', 'sex'].join(',');
// 文字列を配列に
let a = 'one tow sox'.split(' ');

配列と連想配列
// 配列、Python の append は push
let array = ["YAMAHA", "HONDA", "SUZUKI"];
// 追加
array.push("KAWASAKI");
// 書き換え
array[0] = "BMW";
// 削除
array.splice(1, 1);
// 要素数
print(array.length);
// ループ
array.forEach(function(element) {
    print(element);
});



// 連想配列、Python とほぼ同様
// キーはクォーテーションで囲まなくても問題ない
let map = {"TOYOTA": "LEXUS", "HONDA": "ACURA"};

// 追加
map["NISSAN"] = "DATSUN";

// 書き換え
map["HONDA"] = "Super Cub";

// 削除、但し undefined になるだけで要素数は減らない
// map.delete("TOYOTA"); はまだ使えない
delete map["TOYOTA"];

// ループはキーが入る
for (let key in map) {
    print(key + " : " + map[key]);
}
/* 今後コレが使えるようになるらしい
map.forEach(function(value, key) {
    print(key + " : " + value);
});
*/

コードポイント
// コードポイントを UNICODE 文字に変換
// Python では chr(97)
String.fromCharCode(97);
//=> 'a'

// UNICODE 文字をコードポイントに変換
// Python では ord('a')
String.charCodeAt('a');
//=> 97

let, const(ES6)
// 筆者の JavaScript コードは var を使わず let で宣言しています
// 理由は let であれば下記のような馬鹿げたことは起こらないからである

for (var i=0; i<=4; i++) {
    // 何もしない
}
print(i); //=> 5

// const は他の言語と同様に変更できない定数になる
// どうでもいいけど Swift は定数が let なのでややこしい

const ORENO_YOME = "苗ちゃん";
ORENO_YOME = "エレナ"; //=> Error

テンプレートリテラル(ES6)
// ヒアドキュメントとほぼ同様

let val = "シングルクォート";
let txt = `バッククォートで囲みます
${val}ではありません
改行部は普通に \\n になります`;
print(txt);

// Python の r"" 同様にエスケープシーケンスを無視できる

txt = String.raw`この \n は改行されない`;
print(txt);

メソッド定義の簡略構文(ES6)
// 一般的な Class と似たような使い方ができます
// プロトタイプと違い new は不要
// 'func1: function() {' と書けば ES5 でも使えます

#!/usr/bin/gjs

const App = {
    _num: '666',
    func1() {
        return "Hello";
    },
    func2() {
        return this._num;
    }
}

print(App.func1());
print(App.func2());

Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.