new Number(number)
Number インスタンスを生成する。
引数 number:数値
戻り値:Number インスタンス
Javascript が持つ基本的なオブジェクトについて説明します。ここでいう「オブジェクト」とは、一般的なオブジェクト指向言語の「クラス」の意味合いです。
また、静的プロパティ、静的メソッドとは、インスタンスを生成しなくても使用できるプロパティ、メソッドです。オブジェクト.プロパティ、オブジェクト.メソッド() のように記述します。
インスタンス・プロパティ、インスタンス・メソッドとは、new 演算子でインスタンスを生成し、インスタンス.プロパティ、インスタンス.メソッド() のように記述します。
Number オブジェクトは、数定数や基本データ型などの数値をオブジェクトとして扱うためのラッパーオブジェクトです。
Number オブジェクトの持つプロパティとメソッドについて説明します。
Number オブジェクトの主なプロパティについて説明します。
プロパティ | 意味 | 値 | ||||||
---|---|---|---|---|---|---|---|---|
EPSILONR/O | 数値として表される 2 個の数の最小の差 | 2.220446049250313e-16 (2-52) | ○ | ○ | ○ | ○ | ○ | ○ |
MAX_SAFE_INTEGERR/O | 確実な整数の最大値 | 9007199254740991 (253-1) | ○ | ○ | ○ | ○ | ○ | ○ |
MAX_VALUER/O | 表現可能な正の数の最大値 | 1.7976931348623157e+308 | ○ | ○ | ○ | ○ | ○ | ○ |
MIN_SAFE_INTEGERR/O | 確実な整数の最小値 | -9007199254740991 (-253-1) | ○ | ○ | ○ | ○ | ○ | ○ |
MIN_VALUER/O | 表現可能な正の数の最小値 | 4.94065645841247e-324 | △ | △ | △ | △ | △ | △ |
NaNR/O | 数値ではないことを示す特別な値 | NaN | ○ | ○ | ○ | ○ | ○ | ○ |
NEGATIVE_INFINITYR/O | 「負の無限大」のことを表す特別な値 | -Infinity | ○ | ○ | ○ | ○ | ○ | ○ |
POSITIVE_INFINITYR/O | 「正の無限大」のことを表す特別な値 | Infinity | ○ | ○ | ○ | ○ | ○ | ○ |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Number.EPSILON; document.getElementById("d2").textContent=Number.MAX_SAFE_INTEGER; document.getElementById("d3").textContent=Number.MAX_VALUE; document.getElementById("d4").textContent=Number.MIN_SAFE_INTEGER; document.getElementById("d5").textContent=Number.MIN_VALUE; document.getElementById("d6").textContent=Number.NaN; document.getElementById("d7").textContent=Number.NEGATIVE_INFINITY; document.getElementById("d8").textContent=Number.POSITIVE_INFINITY; </script>
Number オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
isNaN(value) | 値 | NaN(数値でない)かどうかを返す。 | 数値型で NaN のとき true、それ以外は false |
isFinite(value) | 値 | 有限数(MIN_VALUE と MAX_VALUE の間)かどうかを返す。 | 有限数のとき true、そうでないとき false |
isInteger(value) | 値 | 整数かどうかを返す。 | 整数のとき true、そうでないとき false |
isSafeInteger(value) | 値 | 確実な範囲の整数(MAX_SAFE_INTEGER と MIN_SAFE_INTEGER)の間かどうかを返す。 | 確実な範囲の整数のとき true、そうでないとき false |
<span id="d11"></span> <span id="d12"></span><br> <!-- 以下略 --> <script> document.getElementById("d11").textContent=Number.isNaN("xxx"); document.getElementById("d12").textContent=Number.isNaN(0 / 0); document.getElementById("d21").textContent=Number.isFinite(1e1000); document.getElementById("d22").textContent=Number.isFinite(1e308); document.getElementById("d31").textContent=Number.isInteger(0.5); document.getElementById("d32").textContent=Number.isInteger(1); document.getElementById("d41").textContent=Number.isSafeInteger(9007199254740992); document.getElementById("d42").textContent=Number.isSafeInteger(9007199254740991); </script>
注意
Number.isNaN() と isNaN() グローバル関数とでは、結果が異なる場合があります。
Number.isNaN() の場合は、数値型でなければ数値でなくても false だが、isNaN() グローバル関数は、数値に変換できない時点で NaN になり、結果として true となる。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
parseFloat(string) | 解析値 | 解析値を解析し、数値ならば浮動小数点数を返す。 | 浮動小数点数、NaN(数値に変換できない)、Infinity(無限) |
parseInt(string) | 解析値 | 解析値を解析し、数値ならば整数を返す。 | 整数、NaN(数値に変換できない) |
<span id="d01"></span> <span id="d11"></span><br> <!-- 以下略 --> <script> document.getElementById("d01").textContent=Number.parseFloat("26.7"); document.getElementById("d02").textContent=Number.parseFloat("AAA"); document.getElementById("d03").textContent=Number.parseFloat(5 / 0); document.getElementById("d11").textContent=Number.parseInt("26.7"); document.getElementById("d12").textContent=Number.parseInt("AAA"); document.getElementById("d13").textContent=Number.parseInt(5 / 0); </script>
Number インスタンスの持つプロパティとメソッドについて説明します。
Number インスタンスを生成する。
引数 number:数値
戻り値:Number インスタンス
<div id="d1"></div> <div id="d2"></div> <div id="d3"></div> <script> let n1 = new Number("123"); document.getElementById("d1").textContent=typeof n1; let n2 = Number("123"); // これは Number 関数で、数値に変換している document.getElementById("d2").textContent=typeof n2; let n3 = 123; // これは数値 document.getElementById("d2").textContent=typeof n3; </script>
new Number() はインスタンスが生成されるので type は object になります。それ以外は、数値なので number になります。ただし、実用上は暗黙の型変換が行わるためか、これらに余り違いはありません。
Number インスタンスの主なメソッドについて説明します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toExponential([fractionDigits]) | 小数点の後の桁数規定値:その数を表すのに必要な数の桁 | 指数表記で表した文字列を返す。 | 指数表記 |
toFixed([digits]) | 小数点の後の桁数規定値:0 | 固定小数点表記で表した文字列を返す。 | 固定小数点表記 |
toPrecision([precision]) | 有効数字の桁数 | 指定された精度で表した文字列を返す。 | 指定された精度で表した文字列 |
<div id="d1"></div> <!-- 以下略 --> <script> let n = 26.1234; document.getElementById("d1").textContent=n.toExponential(); document.getElementById("d2").textContent=n.toExponential(2); document.getElementById("d3").textContent=n.toExponential(4); document.getElementById("d11").textContent=n.toFixed(); document.getElementById("d12").textContent=n.toFixed(3); document.getElementById("d21").textContent=n.toPrecision(); document.getElementById("d22").textContent=n.toPrecision(3); </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toLocaleString([[locales [, options]]]) | ロケール、オプション ロケール 言語コード一覧 オプション {名称:値,...} 下表参照 | 指定された言語やオプションに沿った数値を表した文字列を返す。 | 言語やオプションに沿った数値を表す文字列 |
toString([radix]) | 基数規定値:10 | 指定された基数で表した文字列を返す。 | 指定された基数で表した文字列 |
名称 | 値 | 説明 |
---|---|---|
style | decimal | 数値フォーマット規定値 |
currency | 通貨フォーマット | |
percent | パーセントフォーマット | |
currency | style="currency" のとき指定 | |
JPY | 日本円 | |
USD | アメリカドル | |
EUR | ユーロ | |
GBP | イギリスポンド | |
など | ||
minimumIntegerDigits | 使用する整数の桁数の最小数 | 1~21規定値:1 |
minimumFractionDigits | 使用する小数の桁数の最小数 | 0~20規定値:(decimal、percentのとき 0、currencyのとき 言語による) |
maximumFractionDigits | 使用する整数の桁数の最大数 | 0~20規定値:(decimalのとき minimumFractionDigitsと3の大きい方 percentのとき minimumFractionDigitsと0の大きい方 currencyのとき minimumFractionDigitsと言語によって決まる値の大きい方) |
minimumSignificantDigits | 使用する有効桁数の最小値 | 1~21規定値:1 |
maximumSignificantDigits | 使用する有効桁数の最大値 | 1~21規定値:minimumSignificantDigits |
<div id="d1"></div> <!-- 以下略 --> <script> let c = 1234; document.getElementById("d1").textContent=c.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }); document.getElementById("d2").textContent=c.toLocaleString('en-IN', { style: 'currency', currency: 'EUR' }); document.getElementById("d3").textContent=0.352.toLocaleString('ja-JP', { style: 'percent', minimumFractionDigits: 2 }); document.getElementById("d11").textContent=c.toString(); document.getElementById("d12").textContent=c.toString(16); </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
valueOf() | なし | プリミティブ(基本データ型の)値を返す。 | プリミティブ値 |
<div id="d1"></div> <!-- 以下略 --> <script> let n = new Number(26.1234); let c = new Number(1234); document.getElementById("d1").textContent=n.valueOf(); document.getElementById("d2").textContent=c.valueOf(); </script>
String オブジェクトは、文字列を扱うためのオブジェクトです。
注意
String オブジェクトは、文字によっては正しく機能しません。例えば、𠀋𡈽𡌛𡑮𡢽 といった文字です。
Windows の内部コードとして使用されている UTF-16 は、ほとんどの文字が 16ビットで定義されており、文字数を数えたり、何文字目かを取り出す場合にも扱いやすいという特徴があります。
しかし、先に挙げた文字は、実は 32ビットで定義された文字で、これらの文字は、String オブジェクトでは、一文字なのに二文字分として扱われてしまい、文字数や文字位置が正しく得られないといったことが起きます。
ただし、これらは JIS X 0213の第3・4水準漢字の一部の文字なので、ほとんど影響はないかもしれません。
String オブジェクトの持つプロパティとメソッドについて説明します。
String オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
UTF-16 で指定された Unicode の文字列を返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
fromCharCode(code1[,code2[, ... , codeN]]) | 文字コード (16ビット) | UTF-16 で指定された Unicode の文字列を返す。 | 文字列 |
fromCodePoint(code1[,code2[, ... , codeN]]) | 文字コード (32ビット) | UTF-16 で指定された Unicode の文字列を返す。 | 文字列 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=String.fromCharCode(0x41); document.getElementById("d2").textContent=String.fromCharCode(0x6F22, 0x5B57); document.getElementById("d3").textContent=String.fromCharCode(0xD840, 0xDC0B); document.getElementById("d4").textContent=String.fromCharCode(0x2000B); // 32ビットに非対応(下位16ビットのみ変換) document.getElementById("d5").textContent=String.fromCodePoint(0x2000B); // 32ビットに対応 </script>
二つ目の例は、文字コードが2つ指定されていますので2文字になります。
三つ目の例も、文字コードが2つ指定されていますが、こちらは1文字です。このコードは32ビットで1文字を表します。
四つ目と五つ目の例は、三つ目の例と同じ文字を32ビットで指定していますが、fromCharCode は非対応です。
String インスタンスの主なプロパティとメソッドについて説明します。一般的なオブジェクト指向言語の「インスタンスプロパティ」「インスタンスメソッド」の意味合いです。
String インスタンスを生成する。
引数 string:文字列に変換する対象
戻り値:String インスタンス
<div id="d1"></div> <div id="d2"></div> <div id="d3"></div> <script> let s1 = new String(123); document.getElementById("d1").textContent=typeof s1; let s2 = String(123); // これは String 関数で、文字列に変換している document.getElementById("d2").textContent=typeof s2; let s3 = "123"; // これは文字列 document.getElementById("d2").textContent=typeof n3; </script>
new String() はインスタンスが生成されるので type は object になります。それ以外は、文字列なので string になります。ただし、実用上は暗黙の型変換が行わるためか、これらに余り違いはありません。
プロパティ | 値 |
---|---|
lengthR/O | 文字列の文字数 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent="ABC".length; document.getElementById("d2").textContent="漢字".length; document.getElementById("d3").textContent="".length; document.getElementById("d4").textContent="𠀋".length; </script>
"𠀋" という文字は UTF-16 で 32ビットのコードなので、一文字なのに length は 2 が返ってきています。
文字列をロケール、オプションを考慮して比較し、その大小関係を返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
localeCompare(search[,locales, option]) | 検索文字列、ロケール、オプション ロケール 言語コード一覧 オプション {名称:値,...} 下表参照 | 「ロケール」や「オプション」に従って検索し その結果を返す。 | 「検索文字列」が 大きければ 負 等しければ 0 小さければ 正 |
名称 | 値 | 説明 |
---|---|---|
sensitivity | "base" | ベース文字が異なる場合等しくないとする(a ≠ b, a = á, a = A) |
"accent" | ベース文字、アクセントや発音記号が異なる場合等しくないとする(a ≠ b, a ≠ á, a = A) | |
"case" | ベース文字や大文字・小文字が異なる場合等しくないとする(a ≠ b, a ≠ A, a = á) | |
"variant" | 文字が異なれば等しくないとする(a ≠ b, a ≠ A, a ≠ á 通常の比較) | |
ignorePunctuation | true | 句読点を無視する |
false | 句読点を無視しない規定値 | |
numeric | true | 数値として比較("2" < "10") |
false | 文字列として比較("10" < "2")規定値 | |
caseFirst | "upper" | 大文字 < 小文字(昇順の場合、大文字が先に並ぶ) |
"lower" | 小文字 < 大文字(昇順の場合、小文字が先に並ぶ) | |
false | locales のデフォルトを使用規定値 |
<span id="d01"></span> <span id="d11"></span> <span id="d21"></span> <span id="d31"></span><br> <!-- 以下略 --> <script> let s = new String("ああ"); document.getElementById("d01").textContent=s.localeCompare("あ、い"); document.getElementById("d02").textContent=s.localeCompare("あ、い", "ja", {ignorePunctuation:true}); document.getElementById("d03").textContent=s.localeCompare("あ、い", "ja", {ignorePunctuation:false}); s = "2" document.getElementById("d11").textContent=s.localeCompare("10"); document.getElementById("d12").textContent=s.localeCompare("10", "ja", {numeric:true}); document.getElementById("d13").textContent=s.localeCompare("10", "ja", {numeric:false}); s = "AA" document.getElementById("d21").textContent=s.localeCompare("aa"); document.getElementById("d22").textContent=s.localeCompare("aa", "en", {caseFirst:true}); document.getElementById("d23").textContent=s.localeCompare("aa", "en", {caseFirst:"upper"}); document.getElementById("d24").textContent=s.localeCompare("aa", "en", {caseFirst:"lower"}); s = "\xE1" // á document.getElementById("d31").textContent=s.localeCompare("a"); document.getElementById("d32").textContent=s.localeCompare("a", "fr", {sensitivity:"base"}); document.getElementById("d33").textContent=s.localeCompare("a", "fr", {sensitivity:"accent"}); document.getElementById("d34").textContent=s.localeCompare("a", "fr", {sensitivity:"case"}); document.getElementById("d35").textContent=s.localeCompare("a", "fr", {sensitivity:"variant"}); </script>
文字列を検索して、存在しているかどうかを返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
includes(search[, position]) | 検索文字列、検索開始位置規定値:0 | 「検索開始位置」以降に「検索文字列」があるかどうかを返す。 | あれば true、なければ false |
startsWith(search[, position]) | 検索文字列、検索開始位置規定値:0 | 「検索開始位置」から「検索文字列」が始まっているかどうかを返す。 | 始まっていれば true、いなければ false |
endsWith(search[, length]) | 検索文字列、検索文字列長規定値:文字列長 | 「検索文字列長」-1の位置で「検索文字列」が終わっているかどうかを返す。 | 終わっていれば true、いなければ false |
<span id="d01"></span> <span id="d11"></span> <span id="d21"></span><br> <!-- 以下略 --> <script> let s = new String("ABCDEFGABC"); document.getElementById("d01").textContent=s.includes("BC"); document.getElementById("d02").textContent=s.includes("X"); document.getElementById("d03").textContent=s.includes("CD", 3); document.getElementById("d11").textContent=s.startsWith("ABC"); document.getElementById("d12").textContent=s.startsWith("ABC", 1); document.getElementById("d13").textContent=s.startsWith("ABC", 7); document.getElementById("d21").textContent=s.endsWith("BC"); document.getElementById("d22").textContent=s.endsWith("BC", 9); document.getElementById("d23").textContent=s.endsWith("BC", 3); </script>
文字列を検索して、存在している位置を返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
indexOf(key[, from]) | 検索文字列、検索開始位置規定値:0 | 「検索開始位置」から後ろに向かって「検索文字列」を検索し見つかった位置を返す。 | あれば 位置(>=0)、なければ -1 |
lastIndexOf(key[, from]) | 検索文字列、検索開始位置規定値:文字列長 | 「検索開始位置」から前に向かって「検索文字列」を検索し見つかった(前からの)位置を返す。 | あれば 位置(>=0)、なければ -1 |
<span id="d01"></span> <span id="d11"></span><br> <!-- 以下略 --> <script> let s = new String("ABCDEFGABC"); document.getElementById("d01").textContent=s.indexOf("BC"); document.getElementById("d02").textContent=s.indexOf("BC", 2); document.getElementById("d03").textContent=s.indexOf("X"); document.getElementById("d11").textContent=s.lastIndexOf("ABC"); document.getElementById("d12").textContent=s.lastIndexOf("ABC", 7); document.getElementById("d13").textContent=s.lastIndexOf("G", 6); </script>
lastIndexOf("ABC", 7) の結果が 7 である点に注意してください。検索開始位置は 7 なので、検索範囲は、ABCDEFGA ですが、7文字目の A が検索文字列の先頭文字の A と等しいので、その後ろの BC が比較され、結果として等しいため 7 が返るようです。
正規表現に一致する文字列が存在しているかどうかを検査し、その文字列や位置を返します。
引数は文字列ではありません。正規表現を "" で囲まないで、直に書きます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
match(regexp) | 正規表現 正規表現一覧 | 「正規表現」に一致した部分の文字列を返す。 | 一致したら 文字列(複数見つかれば文字列の配列)、しなければ null |
search(regexp) | 正規表現 | 「正規表現」に一致した部分の位置を返す。 | 一致したら 位置(>=0)(複数見つかっても先頭位置のみ)、しなければ -1 |
<span id="d01"></span> <span id="d11"></span><br> <!-- 以下略 --> <script> let s = new String("ABCDxEFGxABxC"); document.getElementById("d01").textContent=s.match(/x./); document.getElementById("d02").textContent=s.match(/B.{0,2}/g); document.getElementById("d03").textContent=s.match(/^B/); document.getElementById("d11").textContent=s.search(/x./); document.getElementById("d12").textContent=s.search(/B.{0,2}/g); document.getElementById("d13").textContent=s.search(/^B/); </script>
正規表現が /B.{0,2}x/g (B で始まり x で終わる 2~4 文字の文字列)のときは複数の位置に一致するはずですが、search では最初の位置しか戻り値に設定されません。
文字列の一部分を取り出します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
charAt(index) | 文字位置 | 文字列から指定された「文字位置」の文字を返す。 | 指定位置の文字 |
substring(from[, to]) | 最初の位置、最後の位置規定値:文字列長 | 「最初の位置」から「最後の位置」の前の文字までを取り出して返す。負数のときは 0 と見なす。 | 取り出した文字列 |
slice(from[, to]) | 最初の位置、最後の位置規定値:文字列長 | 「最初の位置」から「最後の位置」の前の文字までを取り出して返す。負数のときは 文字列長+from、文字列長+to と見なす。 | 取り出した文字列 |
substr(from[, len]) | 最初の位置、文字長規定値:文字列長 | 「最初の位置」から「文字長」分を取り出して返す。「最初の位置」が負数のときは 文字列長+from と見なす。 | 取り出した文字列 |
charCodeAt(index) | 文字位置 | 文字列から指定された「文字位置」の UTF-16 のコードを返す。 | 指定位置の文字の UTF-16 のコード |
<span id="d01"></span> <span id="d11"></span><br> <!-- 以下略 --> <script> let a = "ABCDEFGHIJ"; let k = "あいうえお"; document.getElementById("d01").textContent=a.charAt(2); document.getElementById("d02").textContent=k.charAt(2); document.getElementById("d11").textContent=a.substring(2,4); document.getElementById("d12").textContent=k.substring(2,4); document.getElementById("d21").textContent=a.slice(2,4); document.getElementById("d22").textContent=k.slice(2,4); document.getElementById("d31").textContent=a.slice(-4,-2); document.getElementById("d32").textContent=k.slice(-4,-2); document.getElementById("d41").textContent=a.substr(2,4); document.getElementById("d42").textContent=k.substr(2,4); document.getElementById("d51").textContent=a.substr(-4,2); document.getElementById("d52").textContent=k.substr(-4,2); document.getElementById("d61").textContent=a.charCodeAt(2).toString(16); document.getElementById("d62").textContent=k.charCodeAt(2).toString(16); </script>
最後の charCodeAt は UTF-16 のコードが返ってくるので、16進数表示にしています。ちなみに 43 は 'C' で、3046 は 'う' です。
文字列の前後の空白(全角空白、タブ、改行なども含む)を取り除きます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
trim() | なし | 文字列の両端の空白(全角空白、タブ、改行など)を取り除いた文字列を返す。 | 取り出した文字列 |
trimLeft() | なし | 文字列の左端の空白(全角空白、タブ、改行など)を取り除いた文字列を返す。 | 取り出した文字列 |
trimRight() | なし | 文字列の右端の空白(全角空白、タブ、改行など)を取り除いた文字列を返す。 | 取り出した文字列 |
<div id="d1"></div> <!-- 以下略 --> <script> let a = " \n ab c \n "; // "(タブ)(全角空白)\n(空白)ab(空白)c(タブ)(全角空白)\n(空白)" document.getElementById("d1").textContent="|" + a.trim() + "|"; document.getElementById("d2").textContent="|" + a.trimLeft() + "|"; document.getElementById("d3").textContent="|" + a.trimRight() + "|"; </script>
文字列を分割しその部分文字列を取り出したり、2つの文字列を連結したり、同じ文字列を繰り返し生成し連結します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
split(sep[, limit]) | 区切り文字、分割数規定値:文字数 | 文字列を「区切り文字」で分割し、最大で「分割数分」だけ取り出した文字列を配列として返す。 | 取り出した文字列の配列 |
concat(string) | 追加文字列 | 文字列の後ろに「追加文字列」を連結した文字列を返す。 | 連結した文字列 |
repeat(count) | 繰り返し回数 | 文字列を繰返し回数分生成し連結した文字列を返す。 | 繰返し生成し連結した文字列 |
<span id="d01"></span> <span id="d02"></span> <span id="d03"></span> <!-- 中間略 --> <span id="d07"></span><br> <!-- 以下略 --> <script> function set(n, w) { for (var i = 0 ; i < w.length ; i++) { document.getElementById(n + (i + 1)).textContent="'" + w[i] + "'"; } } let a = "abc,de,,f,g,"; let w = a.split(","); set("d0", w); w = a.split(",", 4); set("d1", w); document.getElementById("d21").textContent="abcde".concat("xyz"); document.getElementById("d31").textContent="○×".repeat(5); </script>
文字列の一部分を別の文字列に置き換えます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
replace(regexp, newString) | 文字列または正規表現、置換文字列 正規表現一覧 | 「文字列」または「正規表現」に一致した部分文字列を「置換文字列」で置き換えた文字列を返す。 | 置き換えた文字列 |
replace(regexp, function) | 正規表現、関数 | 「正規表現」で分割した部分文字列を受け取った「関数」の戻り値を返す。 | 「関数」の戻り値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent="abcdebcd".replace("bc", "xyz"); document.getElementById("d2").textContent="a1b23c456d78e".replace(/\d/g, "#"); document.getElementById("d3").textContent="ABC,XY".replace(/(.*),(.*)/, function(str, p1, p2) {return p2 + "," + p1}); document.getElementById("d4").textContent="abcde".replace("x", "#"); </script>
1つ目は最初に見つかった "bc" を "xyz" に置き換えています。
2つ目は正規表現ですべての数字を捜し "#" に置き換えています。
3つ目は正規表現によって "," で分割し、関数に引数として渡しています。この例では、str が元の文字列の "ABC,XY"、p1 が "ABC"、p2 が "XY" です。分割数が多い場合はそれに合わせて引数を増やします。
4つ目は一致する文字列がありませんので、置換されず元の文字列のままになります。
文字列の大文字・小文字を変換した文字列に置き換えます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toUpperCase() | なし | 大文字に変換した文字列を返す。 | 大文字に変換した文字列 |
toLowerCase() | なし | 小文字に変換した文字列を返す。 | 小文字に変換した文字列 |
toLocaleUpperCase() | なし | ロケール固有のケースマッピングに従って大文字に変換した文字列を返す。 | 大文字に変換した文字列 |
toLocaleLowerCase() | なし | ロケール固有のケースマッピングに従って小文字に変換した文字列を返す。 | 小文字に変換した文字列 |
<div id="d1"></div> <!-- 以下略 --> <script> let a = "Aa Àà Аа Αα Aa あぁ"; document.getElementById("d1").textContent=a.toLowerCase(); document.getElementById("d2").textContent=a.toUpperCase(); document.getElementById("d3").textContent=a.toLocaleLowerCase(); document.getElementById("d4").textContent=a.toLocaleUpperCase(); </script>
現状、変化があるのはアルファベットだけのようです。また、toLowerCase() と toLocaleLowerCase() との違いはないようです。
ちなみに文字は、英語 フランス語 ロシア語 ギリシャ語 全角 ひらがな の順です。
Date オブジェクトは、日付や時刻を扱うオブジェクトです。
Date オブジェクトの持つプロパティとメソッドについて説明します。
Date オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
協定世界時(UTC)の 1970 年 1 月 1 日 00:00:00 から経過したミリ秒を返します。
世界各地の標準時は協定世界時(UTC)を基準として定めており、日本標準時(JST)は協定世界時(UTC)より9時間早く、「GMT+0900」と表記しますが、省略したら日本標準時(JST)になります。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
now() | なし | 1970/1/1 00:00:00 (UTC) から現在までの 経過ミリ秒を返す。 | 経過ミリ秒 |
parse(dateString) | 日時を表す文字列 例:2019/5/1 例:1 May 2019 | 指定された日時の、 1970/1/1 00:00:00 (UTC) からの 経過ミリ秒を返す。 | 経過ミリ秒 |
UTC(year, month, day[, hour[, min[, sec[, ms]]]]) | 日時 year :年(1900~) month:月(0~11) day :日(1~31) hour :時(0~23) min :分(0~59) sec :秒(0~59) ms :ミリ秒(0~999) | 指定された日時 (UTC) の、 1970/1/1 00:00:00 (UTC) からの 経過ミリ秒を返す。 | 経過ミリ秒 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Date.now(); document.getElementById("d2").textContent=Date.parse("2019/5/1"); document.getElementById("d3").textContent=Date.parse("2019/5/1 12:00:00 GMT+900"); // 日本標準時(GMT+900 は省略できる) document.getElementById("d4").textContent=Date.parse("2019/5/1 12:00:00 GMT"); // 協定世界時(日本標準時の9時間遅れ) document.getElementById("d5").textContent=Date.UTC(2019, 4, 1); // UTC は協定世界時、月は 0~11 document.getElementById("d6").textContent=Date.UTC(2019, 4, 1, 12); document.getElementById("d7").textContent=Date.UTC(2019, 4, 1, 12, 5); document.getElementById("d8").textContent=Date.UTC(2019, 4, 1, 12, 5, 30); document.getElementById("d9").textContent=Date.UTC(2019, 4, 1, 12, 5, 30, 500); </script>
Date インスタンスの持つプロパティとメソッドについて説明します。
現在日時(JST)を持つ Date インスタンスを生成する。
戻り値:Date インスタンス
指定された日時(JST)を持つ Date インスタンスを生成する。
引数 value:1970/1/1 00:00:00 (UTC) からの経過ミリ秒
戻り値:Date インスタンス
指定された日時を持つ Date インスタンスを生成する。
引数 string:日時を表す文字列
戻り値:Date インスタンス
指定された日時を持つ Date インスタンスを生成する。
引数 year :年(1900~)
引数 month:月(0~11)
引数 day :日(1~31)
引数 hour :時(0~23)
引数 min :分(0~59)
引数 sec :秒(0~59)
引数 ms :ミリ秒(0~999)
戻り値:Date インスタンス
<div id="d1"></div> <!-- 以下略 --> <script> let dt1 = new Date(); document.getElementById("d1").textContent=typeof dt1; let dt2 = Date(); document.getElementById("d2").textContent=typeof dt2; document.getElementById("d3").textContent=dt1; dt1 = new Date("2019/5/1"); document.getElementById("d4").textContent=dt1; dt1 = new Date("2019/5/1 12:00"); document.getElementById("d5").textContent=dt1; dt1 = new Date(2019, 4, 1); document.getElementById("d6").textContent=dt1; dt1 = new Date(2019, 4, 1, 12, 5, 30, 500); document.getElementById("d7").textContent=dt1; </script>
new Date() はインスタンスが生成されるので type は object になります。Date() は、現在の日時を表す文字列なので string になります。ただし、実用上は暗黙の型変換が行わるためか、これらに余り違いはありません。
3行目は現在日時の Date インスタンスが得られます。4行目以降は指定した日時の Date インスタンスが得られます。
日本標準時(JST)の年月日時分秒などを取得します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
getFullYear() | なし | 4桁の「年」を返す。 | 年(4桁) |
getMonth() | なし | 「月」を返す。 | 月(0~11) |
getDate() | なし | 「日」を返す。 | 日(1~31) |
getHours() | なし | 「時」を返す。 | 時(0~23) |
getMinutes() | なし | 「分」を返す。 | 分(0~59) |
getSeconds() | なし | 「秒」を返す。 | 秒(0~59) |
getMilliseconds() | なし | 「ミリ秒」を返す。 | ミリ秒(0~999) |
getDay() | なし | 「曜日」を返す。 | 曜日(0:日曜日~6:土曜日) |
getTime() | なし | 1970/1/1 00:00:00 (UTC) からの経過ミリ秒を返す。 | 1970/1/1 00:00:00 (UTC) からの経過ミリ秒 |
getTimezoneOffset() | なし | 現地の時間帯のオフセットを分で返す。 | 時間帯のオフセット |
<div id="d1"></div> <!-- 以下略 --> <script> let dt1 = new Date(); document.getElementById("d1").textContent=dt1.getFullYear(); document.getElementById("d2").textContent=dt1.getMonth(); document.getElementById("d3").textContent=dt1.getDate(); document.getElementById("d4").textContent=dt1.getHours(); document.getElementById("d5").textContent=dt1.getMinutes(); document.getElementById("d6").textContent=dt1.getSeconds(); document.getElementById("d7").textContent=dt1.getMilliseconds(); document.getElementById("d8").textContent=dt1.getDay(); document.getElementById("d9").textContent=dt1.getTime(); document.getElementById("d10").textContent=dt1.getTimezoneOffset(); </script>
日本標準時(JST)の現在時刻を表示しています。
協定世界時(UTC)の年月日時分秒などを取得します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
getUTCFullYear() | なし | 4桁の「年」を返す。 | 年(4桁) |
getUTCMonth() | なし | 「月」を返す。 | 月(0~11) |
getUTCDate() | なし | 「日」を返す。 | 日(1~31) |
getUTCHours() | なし | 「時」を返す。 | 時(0~23) |
getUTCMinutes() | なし | 「分」を返す。 | 分(0~59) |
getUTCSeconds() | なし | 「秒」を返す。 | 秒(0~59) |
getUTCMilliseconds() | なし | 「ミリ秒」を返す。 | ミリ秒(0~999) |
getUTCDay() | なし | 「曜日」を返す。 | 曜日(0:日曜日~6:土曜日) |
<div id="d1"></div> <!-- 以下略 --> <script> let dt1 = new Date(); document.getElementById("d1").textContent=dt1.getUTCFullYear(); document.getElementById("d2").textContent=dt1.getUTCMonth(); document.getElementById("d3").textContent=dt1.getUTCDate(); document.getElementById("d4").textContent=dt1.getUTCHours(); document.getElementById("d5").textContent=dt1.getUTCMinutes(); document.getElementById("d6").textContent=dt1.getUTCSeconds(); document.getElementById("d7").textContent=dt1.getUTCMilliseconds(); document.getElementById("d8").textContent=dt1.getUTCDay(); </script>
協定世界時(UTC)の現在時刻を表示しています。
日本標準時(JST)の年月日時分秒などを設定します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
setFullYear() | 年(4桁) | 4桁の「年」を設定する。 | なし |
setMonth() | 月(0~11) | 「月」を設定する。 | なし |
setDate() | 日(1~31) | 「日」を設定する。 | なし |
setHours() | 時(0~23) | 「時」を設定する。 | なし |
setMinutes() | 分(0~59) | 「分」を設定する。 | なし |
setSeconds() | 秒(0~59) | 「秒」を設定する。 | なし |
setMilliseconds() | ミリ秒(0~999) | 「ミリ秒」を設定する。 | なし |
setTime() | 1970/1/1 00:00:00 (UTC) からの経過ミリ秒 | 1970/1/1 00:00:00 (UTC) からの経過ミリ秒を設定する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(d) { return d.toLocaleString() + "." + ("00"+d.getMilliseconds()).slice(-3); } let dt0 = new Date(); // 現在時刻 let dt1 = new Date(0); // 1970/1/1 00:00:00 document.getElementById("d1").textContent=disp(dt1); dt1.setFullYear(dt0.getFullYear()); // 年 document.getElementById("d2").textContent=disp(dt1); dt1.setMonth(dt0.getMonth()); // 月 document.getElementById("d3").textContent=disp(dt1); dt1.setDate(dt0.getDate()); // 日 document.getElementById("d4").textContent=disp(dt1); dt1.setHours(dt0.getHours()); // 時 document.getElementById("d5").textContent=disp(dt1); dt1.setMinutes(dt0.getMinutes()); // 分 document.getElementById("d6").textContent=disp(dt1); dt1.setSeconds(dt0.getSeconds()); // 秒 document.getElementById("d7").textContent=disp(dt1); dt1.setMilliseconds(dt0.getMilliseconds()); // ミリ秒 document.getElementById("d8").textContent=disp(dt1); dt0 = new Date(); // 現在時刻 dt1.setTime(dt0.getTime()); document.getElementById("d9").textContent=disp(dt1); </script>
一行目が初期日時ですが、順に年、月、日、時、分、秒、ミリ秒と設定しています。最後の行は、現在時刻を取り直して一度に設定し直しています。
協定世界時(UTC)の年月日時分秒などを設定します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
setUTCFullYear() | 年(4桁) | 4桁の「年」を設定する。 | なし |
setUTCMonth() | 月(0~11) | 「月」を設定する。 | なし |
setUTCDate() | 日(1~31) | 「日」を設定する。 | なし |
setUTCHours() | 時(0~23) | 「時」を設定する。 | なし |
setUTCMinutes() | 分(0~59) | 「分」を設定する。 | なし |
setUTCSeconds() | 秒(0~59) | 「秒」を設定する。 | なし |
setUTCMilliseconds() | ミリ秒(0~999) | 「ミリ秒」を設定する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(d) { return d.toUTCString() + "." + ("00"+d.getUTCMilliseconds()).slice(-3); } let dt0 = new Date(); // 現在時刻 let dt1 = new Date(0); // 1970/1/1 00:00:00 document.getElementById("d1").textContent=disp(dt1); dt1.setUTCFullYear(dt0.getUTCFullYear()); // 年 document.getElementById("d2").textContent=disp(dt1); dt1.setUTCMonth(dt0.getUTCMonth()); // 月 document.getElementById("d3").textContent=disp(dt1); dt1.setUTCDate(dt0.getUTCDate()); // 日 document.getElementById("d4").textContent=disp(dt1); dt1.setUTCHours(dt0.getUTCHours()); // 時 document.getElementById("d5").textContent=disp(dt1); dt1.setUTCMinutes(dt0.getUTCMinutes()); // 分 document.getElementById("d6").textContent=disp(dt1); dt1.setUTCSeconds(dt0.getUTCSeconds()); // 秒 document.getElementById("d7").textContent=disp(dt1); dt1.setUTCMilliseconds(dt0.getUTCMilliseconds()); // ミリ秒 document.getElementById("d8").textContent=disp(dt1); </script>
一行目が初期日時ですが、順に年、月、日、時、分、秒、ミリ秒と設定しています。
日時を文字列に変換します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toDateString() | なし | 日付部分を文字列に変換する。 | アメリカ英語式日付文字列 |
toTimeString() | なし | 時刻部分を文字列に変換する。 | アメリカ英語式時刻文字列 |
toString() | なし | 日時を文字列に変換する。 | アメリカ英語式日時文字列 |
toUTCString() | なし | 協定世界時を使って日付を文字列に変換する。 | 「曜日(英略), 日 月(英略) 年 時:分:秒 時間帯」という形式の文字列 |
<div id="d1"></div> <!-- 以下略 --> <script> let dt1 = new Date(); // 現在時刻 document.getElementById("d1").textContent=dt1.toDateString(); document.getElementById("d2").textContent=dt1.toTimeString(); document.getElementById("d3").textContent=dt1.toString(); document.getElementById("d4").textContent=dt1.toUTCString(); </script>
指定されたロケールやオプションに従って日時を文字列に変換します。ただし、ブラウザによって表示形式が異なります。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toLocaleDateString([locales][, options]) | ロケール、オプション ロケール 言語コード一覧 オプション {名称:値,...} 下表参照 | ロケールやオプションに従って日付部分を(オプションに weekday を指定すると時刻も)文字列に変換する。 | 日付文字列 |
toLocaleTimeString([locales][, options]) | ロケール、オプション ロケール 言語コード一覧 オプション {名称:値,...} 下表参照 | ロケールやオプションに従って時刻部分を文字列に変換する。 | 時刻文字列 |
toLocaleString([locales][, options]) | ロケール、オプション ロケール 言語コード一覧 オプション {名称:値,...} 下表参照 | ロケールやオプションに従って日時を文字列に変換する。 | 日時文字列 |
値 | 説明 |
---|---|
"en-US" | アメリカ英語式(w, m d yyyy hh:mm:ss) |
"ja-JP" | 日本式(yyyy年m月d日 w曜日 hh:mm:ss) |
"ja-JP-u-ca-japanese" | 日本式(令和 yy年m月d日 w曜日 hh:mm:ss) |
名称 | 値 | 説明 |
---|---|---|
hour12 | 12/24時間表示 | |
true | 12時間表示 | |
false | 24時間表示規定値 | |
weekday | 曜日表示 | |
"narrow" | 日、月、...(ja-JP などのとき) Sun、Mon、...(en-US のとき) | |
"short" | 日、月、...(ja-JP などのとき) Sun、Mon、...(en-US のとき) | |
"long" | 日曜日、月曜日、...(ja-JP などのとき) Sunday、Monday、...(en-US のとき) | |
year | 年月日時分秒表示 "numeric" 前 0 なし (9) "2-digit" 前 0 あり (09) month の場合(en-US のとき)はこれ以外に "narrow" Jan、Feb、... "short" Jan、Feb、... "long" January、February、... | |
month | ||
day | ||
hour | ||
minute | ||
second |
<div id="d1"></div> <!-- 以下略 --> <script> let dt1 = new Date(2019,4,1,13,2,3); // 2019/5/1 13:02:03 document.getElementById("d1").textContent=dt1.toLocaleDateString(); document.getElementById("d2").textContent=dt1.toLocaleDateString("en-US"); document.getElementById("d3").textContent=dt1.toLocaleDateString("ja-JP-u-ca-japanese"); document.getElementById("d4").textContent=dt1.toLocaleDateString("ja-JP", {weekday:"short", month:"long", day:"2-digit"}); document.getElementById("d5").textContent=dt1.toLocaleDateString("ja-JP", {weekday:"long", month:"2-digit", day:"numeric"}); document.getElementById("d11").textContent=dt1.toLocaleTimeString(); document.getElementById("d12").textContent=dt1.toLocaleTimeString("en-US"); document.getElementById("d13").textContent=dt1.toLocaleTimeString("ja-JP-u-ca-japanese"); document.getElementById("d14").textContent=dt1.toLocaleTimeString("ja-JP", {hour12:true, hour:"numeric"}); document.getElementById("d15").textContent=dt1.toLocaleTimeString("ja-JP", {hour12:false, hour:"2-digit"}); document.getElementById("d21").textContent=dt1.toLocaleString(); document.getElementById("d22").textContent=dt1.toLocaleString("en-US"); document.getElementById("d23").textContent=dt1.toLocaleString("ja-JP-u-ca-japanese"); document.getElementById("d23").textContent=dt1.toLocaleString("ja-JP-u-ca-japanese", {year:"numeric"}); document.getElementById("d24").textContent=dt1.toLocaleString("ja-JP", {hour12:true, month:"long", day:"numeric", hour:"numeric"}); document.getElementById("d25").textContent=dt1.toLocaleString("ja-JP", {hour12:false, month:"short", day:"2-digit", hour:"2-digit"}); </script>
ブラウザによって表示形式が異なります。また、オプションによって表示される項目(年月日時分秒)が変わりますが、それもブラウザによって異なります。
ロケール | オプション | ||||||
---|---|---|---|---|---|---|---|
"ja-JP" | 2019/5/1 13:02:03 | ||||||
{year:"numeric"} | 2019年 | ||||||
{year:"2-digit"} | 19年 | ||||||
{month:"long"} | 5月 | ||||||
{month:"short"} | 5月 | ||||||
{month:"numeric"} | 5月 | ||||||
{month:"2-digit"} | 05月 | ||||||
{day:"numeric"} | 1日 | ||||||
{day:"2-digit"} | 01日 | ||||||
{weekday:"long"} | 水曜日 | ||||||
{weekday:"short"} | 水 | ||||||
{hour:"numeric"} | 13時 | ||||||
{hour:"2-digit", hour12:true} | 午後01時 | ||||||
{minute:"numeric"} | 2 | ||||||
{minute:"2-digit"} | 2 | 02 | 2 | ||||
{second:"numeric"} | 3 | ||||||
{second:"2-digit"} | 3 | 03 | 3 | ||||
{year:"numeric",month:"numeric"} | 2019/5 | ||||||
{year:"numeric",month:"numeric", day:"numeric"} |
2019/5/1 | ||||||
{year:"numeric",month:"numeric", day:"numeric",weekday:"long"} |
2019/5/1水曜日 | ||||||
{year:"numeric",month:"numeric", day:"numeric",weekday:"short"} |
2019/5/1(水) | ||||||
{hour:"numeric",minute:"numeric"} | 13:02 | ||||||
{hour12:true,hour:"numeric",minute:"numeric"} | 午後1:02 | ||||||
{year:"numeric",month:"numeric",day:"numeric", hour:"numeric",minute:"numeric"} |
2019/5/1 13:02 | ||||||
"ja-JP -u-ca -japanese" | R1/5/1 13:02:03 | ||||||
{year:"numeric"} | 令和元年 | ||||||
{year:"2-digit"} | 令和元年 | ||||||
{year:"numeric",month:"numeric"} | R1/5 | ||||||
{year:"numeric",month:"numeric", day:"numeric"} |
R1/5/1 | ||||||
{year:"numeric",month:"numeric", day:"numeric",weekday:"long"} |
R1/5/1水曜日 | ||||||
{year:"numeric",month:"numeric", day:"numeric",weekday:"short"} |
R1/5/1(水) | ||||||
{year:"numeric",month:"numeric",day:"numeric", hour:"numeric",minute:"numeric"} |
R1/5/1 13:02 |
Math オブジェクトは、数学的な定数と関数を提供するプロパティとメソッドを持つ、組み込みのオブジェクトです。
Math オブジェクトの持つプロパティとメソッドについて説明します。
Math オブジェクトの主なプロパティについて説明します。
プロパティ | 意味 | 値 |
---|---|---|
ER/O | ネイピア数(オイラー数)。自然対数の底として用いられる数学定数 | 約 2.71828182845905 |
LN2R/O | 2 の自然対数 | 約 0.693147180559945 |
LN10R/O | 10 の自然対数 | 約 2.30258509299405 |
LOG2ER/O | 2 を底とした E の対数 | 約 1.44269504088896 |
LOG10ER/O | 10 を底とした E の対数 | 約 0.434294481903252 |
PIR/O | 円周率 | 約 3.14159265358979 |
SQRT1_2R/O | 1/2 の平方根 | 約 0.707106781186548 |
SQRT2R/O | 2 の平方根 | 約 1.4142135623731 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.E; document.getElementById("d2").textContent=Math.LN2; document.getElementById("d3").textContent=Math.LN10; document.getElementById("d4").textContent=Math.LOG2E; document.getElementById("d5").textContent=Math.LOG10E; document.getElementById("d6").textContent=Math.PI; document.getElementById("d7").textContent=Math.SQRT1_2; document.getElementById("d8").textContent=Math.SQRT2; </script>
Math オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
acos(x) | 数値 | アークコサイン (逆余弦) を返す。 | アークコサイン (逆余弦)値 |
acosh(x) | 数値 | ハイパボリックアークコサイン (双曲線逆余弦)を返す。 | ハイパボリックアークコサイン (双曲線逆余弦)値 |
asin(x) | 数値 | アークサイン (逆正弦)を返す。 | アークサイン (逆正弦)値 |
asinh(x) | 数値 | ハイパボリックアークサイン (双曲線逆正弦)を返す。 | ハイパボリックアークサイン (双曲線逆正弦)値 |
atan(x) | 数値 | アークタンジェント (逆正接)を返す。 | アークタンジェント (逆正接)値 |
atanh(x) | 数値 | ハイパボリックアークタンジェント (双曲線逆正接)を返す。 | ハイパボリックアークタンジェント (双曲線逆正接)値 |
atan2(y, x) | 数値、数値 | 比率のアークタンジェント (逆正接)を返す。 | 比率のアークタンジェント (逆正接)値 |
cos(x) | 数値 | コサイン (余弦)を返す。 | コサイン (余弦)値 |
cosh(x) | 数値 | ハイパボリックコサイン (双曲線余弦)を返す。 | ハイパボリックコサイン (双曲線余弦)値 |
sin(x) | 数値 | サイン (正弦)を返す。 | サイン (正弦)値 |
sinh(x) | 数値 | ハイパボリックサイン (双曲線正弦)を返す。 | ハイパボリックサイン (双曲線正弦)値 |
tan(x) | 数値 | タンジェント (正接)を返す。 | タンジェント (正接)値 |
tanh(x) | 数値 | ハイパボリックタンジェント (双曲線正接)を返す。 | ハイパボリックタンジェント (双曲線正接)値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.acos(-1); // 3.141592653589793 document.getElementById("d2").textContent=Math.acosh(2); // 1.3169578969248166 document.getElementById("d3").textContent=Math.asin(1); // 1.5707963267948966 document.getElementById("d4").textContent=Math.asinh(1); // 0.881373587019543 document.getElementById("d5").textContent=Math.atan(1); // 0.7853981633974483 document.getElementById("d6").textContent=Math.atanh(0.5); // 0.5493061443340548 document.getElementById("d7").textContent=Math.atan2(90, 15); // 1.4056476493802699 document.getElementById("d8").textContent=Math.cos(Math.PI/3); // 0.5000000000000001 document.getElementById("d9").textContent=Math.cosh(1); // 1.5430806348152437 document.getElementById("d10").textContent=Math.sin(Math.PI/6); // 0.49999999999999994 document.getElementById("d11").textContent=Math.sinh(1); // 1.1752011936438014 document.getElementById("d12").textContent=Math.tan(1); // 1.5574077246549023 document.getElementById("d13").textContent=Math.tanh(1); // 0.7615941559557649 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
log(x) | 数値 | x の自然対数 (loge x)を返す。 | x の自然対数値 |
log1p(x) | 数値 | x+1 の自然対数 (loge (x+1))を返す。 | x+1 の自然対数値 |
log10(x) | 数値 | x の常用対数 (log10 x)を返す。 | x の常用対数値 |
log2(x) | 数値 | x の二進対数 (log2 x)を返す。 | x の二進対数値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.log(10); // 約 2.302585092994046 document.getElementById("d2").textContent=Math.log1p(1); // 約 0.6931471805599453 document.getElementById("d3").textContent=Math.log10(2); // 約 0.3010299956639812 document.getElementById("d4").textContent=Math.log2(3); // 約 1.584962500721156 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
exp(x) | 数値 | x の指数値 (ex)を返す。 | x の指数値 |
expm1(x) | 数値 | x の指数値 - 1 (ex - 1)を返す。 | x の指数値 - 1 (Ex - 1) |
pow(x, y) | 数値 | x の y 乗 (xy)を返す。 | x の y 乗 (xy)値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.exp(1); // 約 2.718281828459045 document.getElementById("d2").textContent=Math.expm1(-1); // 約 -0.6321205588285577 document.getElementById("d3").textContent=Math.pow(7, 2); // 49 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
hypot([x[, y[, …]]]) | 数値 | 二乗和の平方根(x2 + y2 + ... の平方根)を返す。 | 二乗和の平方根値 |
sqrt(x) | 数値 | 平方根を返す。 | 平方根値 |
cbrt(x) | 数値 | 立方根を返す。 | 立方根値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.hypot(3,4,5); // 約 7.0710678118654755 document.getElementById("d2").textContent=Math.sqrt(2); // 約 1.414213562373095 document.getElementById("d3").textContent=Math.cbrt(2); // 約 1.2599210498948734 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
abs(x) | 数値 | 絶対値を返す。 | 絶対値 |
ceil(x) | 数値 | 小数点以下を切り上げた値を返す。 | 切り上げ値 |
floor(x) | 数値 | 小数点以下を切り下げた値を返す。 | 切り下げ値 |
fround(x) | 数値 | 最も近い単精度浮動小数点数を返す。 | 最も近い単精度浮動小数点数値 |
round(x) | 数値 | 最も近い整数を返す。 | 最も近い整数値 |
trunc(x) | 数値 | 小数部を取り除いた整数を返す。 | 小数部を取り除いた整数値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d2").textContent=Math.abs(-2); // 2 document.getElementById("d2").textContent=Math.ceil(45.95); // 46 document.getElementById("d3").textContent=Math.floor(45.95); // 45 document.getElementById("d2").textContent=Math.fround(1.337); // 約 1.3370000123977661 document.getElementById("d2").textContent=Math.round(20.5); // 21 document.getElementById("d3").textContent=Math.trunc(42.84); // 42 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
max([x[, y[, …]]]) | 数値 | 最大の数を返す。 | 最大値 |
min([x[, y[, …]]]) | 数値 | 最小の数を返す。 | 最小値 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d2").textContent=Math.max(5,-2,7,3,2); // 7 document.getElementById("d2").textContent=Math.min(5,-2,7,3,2); // -2 </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
random() | なし | 0 以上 1 未満の範囲で疑似乱数を返す。 | 疑似乱数 |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Math.random(); </script>
Array オブジェクトは、配列を構築するためのオブジェクトです。
Array オブジェクトの持つプロパティとメソッドについて説明します。
Array オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
of([value[,value,...]]) | 要素数 | 指定された要素数(指定がなければ要素数 0)の配列を生成する。 | Array インスタンス |
from(array[, mapFn[, thisArg]]) | 配列、関数、this 値 | 「指定された配列」から「関数」を利用して新しい配列を生成する。 「関数」は「指定された配列」のすべての要素に適用され新しい値が求められる。 そのとき、関数内では 「this 値」として渡された値を this オブジェクトとして利用できる。 また、Array.from(obj).map(mapFn, thisArg) と同じ結果となる。 | Array インスタンス |
<span id="d1"></span> <span id="d11"></span> <!-- 途中略 --> <span id="d13"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (var i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } var a = Array.of(1, 2, 3); set(a, "d1"); // 1, 2, 3 let b = Array.of("one", "two", "three"); set(b, "d2"); // "one", "two", "three" let c = Array.from(a); set(c, "d3"); // 1, 2, 3 let d = Array.from("abc"); set(d, "d4"); // "a", "b", "c" let e = Array.from([1,2,3], function(x){return x*10}); set(e, "d5"); // 10, 20, 30 </script>
生成された配列の各要素を表示しています。
最後の例は、元の配列の要素の10倍した値を持った新しい配列が生成されています。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
isArray(obj) | インスタンス | インスタンスが配列かどうかを返す。 | 配列であれば true、そうでなければ false |
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=Array.isArray([]); // true document.getElementById("d2").textContent=Array.isArray(new Array); // true document.getElementById("d3").textContent=Array.isArray(); // false document.getElementById("d4").textContent=Array.isArray(0); // false </script>
Array インスタンスの持つプロパティとメソッドについて説明します。
指定された要素数の配列を生成する。
引数 number:要素数
戻り値:Array インスタンス
指定された初期値を持つ配列を生成する。
整数が一つだけだと要素数と判断されるので、その場合は Array.of を使用する。
引数 value:初期値
戻り値:Array インスタンス
<div id="d1"></div> <!-- 以下略 --> <script> let a = new Array(); document.getElementById("d1").textContent=a.length; // 0 let b = new Array(3); document.getElementById("d2").textContent=b.length; // 3 let c = new Array("one", "two", "three"); document.getElementById("d3").textContent=c.length; // 3 let d = ["one", "two", "three"]; document.getElementById("d4").textContent=d.length; // 3 </script>
要素数を表示しています。また、最後の例のように記述しても配列が生成されます。
Array インスタンスの主なメソッドについて説明します。一般的なオブジェクト指向言語の「インスタンスメソッド」の意味合いです。
配列に他の配列や値を追加したり、一部を取り出したりして、新しい配列を生成します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
concat(value[,value[, ...]]) | 値 | 配列に値をつないでできた新しい配列を返す。 | 配列 |
concat(array[,array[, ...]]) | 配列 | 配列に他の配列をつないでできた新しい配列を返す。 | 配列 |
slice(start[,end]) | 開始位置、 終了位置規定値:配列要素数 (開始位置、終了位置が負の場合は、 配列要素数+開始位置、配列要素数+終了位置となる。) | 配列中の開始位置から終了位置の前までの要素を取り出して、新しい配列を生成する。 | 配列 |
<span id="d11"></span> <!-- 途中略 --> <span id="d15"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (let i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } let arr = ["a", "b"]; let a1 = arr.concat(1, 2, 3); // a b 1 2 3 set(a1, "d1"); let a2 = arr.concat([1, 2, 3]); // a b 1 2 3 set(a2, "d2"); let a3 = arr.concat([1], [2, 3]); // a b 1 2 3 set(arr, "d3"); let a4 = a3.slice(2); // 1 2 3 set(a4, "d4"); let a5 = a3.slice(1, 3); // b 1 set(a5, "d5"); let a6 = a3.slice(-5, -3); // a b set(a6, "d6"); </script>
concat は元の配列に要素が追加された新しい配列が作られます(元の配列は変更ありません)が、push と unshift は元の配列が変更されます。
イテレータとは、一連の処理中において現在の処理位置を把握しつつ、コレクション中のアイテムへ一つずつアクセスする方法を備えたオブジェクトのことです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
entries() | なし | 配列内の各要素に対する key と value のペアを含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
keys() | なし | 配列内の各要素に対する key を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
values() | なし | 配列内の各要素に対する value を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
<div id="d1"></div> <!-- 以下略 --> <script> let arr = ['a', 'b', 'c']; let eArr = arr.entries(); // [0,a] [1,b] [2,c] let i = 1; for (let e of eArr) { document.getElementById("d1" + i++).textContent="[" + e[0] + "," + e[1] + "]"; } eArr = arr.keys(); // 0 1 2 i = 1; for (let e of eArr) { document.getElementById("d2" + i++).textContent=e; } eArr = arr.values(); // a b c i = 1; for (let e of eArr) { document.getElementById("d3" + i++).textContent=e; } </script>
配列中の開始位置から終了位置の前までの要素に、指定した値を設定します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
fill(value[,start[,end]]) | 値、 開始位置、規定値:0 終了位置規定値:配列要素数 (開始位置、終了位置が負の場合は、 配列要素数+開始位置、配列要素数+終了位置となる。) | 配列中の開始位置から終了位置の前までの要素に、指定した値を設定する。 | なし |
<span id="d11"></span> <!-- 途中略 --> <span id="d15"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (let i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } let arr = [1, 2, 3, 4, 5]; arr.fill(0); // 0 0 0 0 0 set(arr, "d1"); arr = [1, 2, 3, 4, 5]; arr.fill(0, 3); // 1 2 3 0 0 set(arr, "d2"); arr = [1, 2, 3, 4, 5]; arr.fill(0, 2, 4); // 1 2 0 0 5 set(arr, "d3"); arr = [1, 2, 3, 4, 5]; arr.fill(0, -2, -1); // 1 2 3 0 5 set(arr, "d4"); </script>
配列に他の配列や値を追加します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
push(value[,value[, ...]]) | 値 | 配列の最後に値を追加する。 | 要素数 |
unshift(value[,value[, ...]]) | 値 | 配列の最初に値を追加する。 | 要素数 |
pop() | なし | 配列の最後から要素を取り除き、その要素の値を返す。 | 要素の値 |
shift() | なし | 配列の最初から要素を取り除き、その要素の値を返す。 | 要素の値 |
<span id="d11"></span> <!-- 途中略 --> <span id="d15"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (let i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } let a1 = ["a", "b"]; let l1 = a1.push(1, 2, 3); // a b 1 2 3 set(a1, "d1"); let a2 = ["a", "b"]; let l2 = a2.unshift(1, 2, 3); // 1 2 3 a b set(a2, "d2"); let i1 = a1.pop(); // a b 1 2 set(a1, "d3"); document.getElementById("d35").textContent="(" + i1 + ")"; // (3) let l2 = a1.shift(); // b 1 2 set(a1, "d4"); document.getElementById("d45").textContent="(" + i2 + ")"; // (a) </script>
最後の2つは取り除いた要素を最後に "()" に囲って表示しています。
配列に他の配列や値をつないでできた新しい配列を返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
splice(index, howMany, [value[,value[, ...]]]) | 開始位置、削除数、値 ... | 開始位置から削除数分削除し、そこに値を追加した新しい配列を返す。 | 削除された要素を含む配列 |
copyWithin(target, start, [end]) | 転記先、開始位置、 終了位置規定値:配列要素数 (開始位置、終了位置が負の場合は、 配列要素数+開始位置、配列要素数+終了位置となる。) | 開始位置から終了位置の前までの要素を転記先にコピーする。 | なし |
<span id="d11"></span> <!-- 途中略 --> <span id="d15"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (let i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } let a1 = ["a", "b"]; let r1 = a1.splice(1, 0, "x"); // a x b set(a1, "d1"); document.getElementById("d15").textContent="(" + r1 + ")"; // () let r2 = a1.splice([1, 2, "b", "c"]); // a b c set(a1, "d2"); document.getElementById("d25").textContent="(" + r2 + ")"; // (x,b) let a2 = [1, 2, 3, 4, 5]; a2.copyWithin(0, 3); // 4 5 3 4 5 set(a2, "d3"); a2 = [1, 2, 3, 4, 5]; a2.copyWithin(1, 3, 5); // 1 4 5 4 5 set(a2, "d4"); </script>
前の2つは、取り除いた要素を最後に "()" に囲って表示しています。
配列の要素を並べ替えます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
sort([compareFunction]) | ソート順を定義する関数 | 配列の要素を指定された関数の返り値に従ってソートする。(関数が指定されていない場合は文字順) | ソートされた配列 |
reverse() | なし | 配列の要素を反転させる。 | なし |
<span id="d11"></span> <!-- 途中略 --> <span id="d15"></span><br> <!-- 以下略 --> <script> function set(array, label) { for (let i = 0 ; i < array.length ; i++) { document.getElementById(label+(i+1)).textContent=array[i]; } } // a < b : -1 // a == b : 0 // a > b : 1 function compare(a, b) { return a < b ? -1 : (a == b ? 0 : 1); // 昇順 } let a1 = [5, 4, 3, 2, 1]; a1.sort(); // 1 2 3 4 5 set(a1, "d1"); a1 = ["e", "d", "c", "b", "a"]; a1.sort(compare); // a b c d e set(a1, "d2"); a1.reverse(); // e d c b a set(a1, "d3"); </script>
配列の要素を指定された関数によって検査します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
every(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数によって実行されるテストに配列のすべての要素が合格するかどうかをテストする。 | 全ての要素が合格のとき true、そうでなければ false |
filter(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数が true を返した要素からなる新しい配列を返す。 | 与えられた関数が true を返す要素からなる配列 |
find(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数が true を返した要素の値を返す。 | 与えられた関数が true を返す要素があればその値、なければ undefined |
findIndex(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数が true を返した要素のインデックスを返す。 | 与えられた関数が true を返す要素があればそのインデックス、なければ -1 |
some(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数によって実行されるテストに合格する要素があるかどうかをテストする。 | 合格する要素があれば true、なければ false |
各メソッドから呼び出される callback 関数は次のような仕様です。
要素ごとに合格しているかどうかを検査する。
引数 element:要素の値
引数 index:要素のインデックス
引数 array:検査されている Array インスタンス
戻り値:検査に合格したのなら true、そうでないなら false
<span id="d01"></span><span id="d02"></span><br> <!-- 以下略 --> <script> function isPositive(element, index, array) { return (element > 0); } document.getElementById("d01").textContent=[5, 7, 3, 4, 2].every(isPositive); // true document.getElementById("d02").textContent=[5, 7, -2, 4, 2].every(isPositive); // false document.getElementById("d11").textContent="[" + [5, 7, -2, 4, 2].filter(isPositive) + "]"; // [5,7,4,2] document.getElementById("d12").textContent="[" + [-5, -7, -2, -4, -2].filter(isPositive) + "]"; // [] document.getElementById("d21").textContent=[-5, -7, 3, -4, -2].find(isPositive); // 3 document.getElementById("d22").textContent=[-5, -7, -2, -4, -2].find(isPositive) == undefined ? "undefined" : ""; // undefined document.getElementById("d31").textContent=[-5, -7, 3, -4, -2].findIndex(isPositive); // 2 document.getElementById("d32").textContent=[-5, -7, -2, -4, -2].findIndex(isPositive); // -1 document.getElementById("d41").textContent=[-5, -7, 3, -4, -2].some(isPositive); // true document.getElementById("d42").textContent=[-5, -7, -2, -4, -2].some(isPositive); // false </script>
配列の各要素に対して指定された関数を実行します。ただし、配列の要素は変更しません。処理結果によって配列とは別のインスタンスを変更したり、新たな配列インスタンスを生成したりします。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
forEach(callback[, thisObject]) | 処理関数、this として使用するインスタンス | 与えられた関数を配列のすべての要素に対して実行する。 | なし |
map(callback[, thisObject]) | テスト関数、this として使用するインスタンス | 与えられた関数を配列のすべての要素に対して実行し、その結果からなる新しい配列を返す。 | 新しい配列 |
各メソッドから呼び出される callback 関数は次のような仕様です。
要素ごとに合格しているかどうかを検査する。
引数 element:要素の値
引数 index:要素のインデックス
引数 array:検査されている Array インスタンス
戻り値:要素の値
<div id="d1"></div> <div id="d2"></div> <script> function calculate(element, index, array) { this[0] += element; this[1] *= element; } function twice(element, index, array) { return element + element; } let result = [0, 1]; // [和,積] [5, 7, 3, 4, 2].forEach(calculate, result); document.getElementById("d1").textContent="[" + result + "]"; // [21,840] document.getElementById("d2").textContent="[" + [5, 7, -2, 4, 2].map(twice) + "]"; // [10,14,-4,8,4] </script>
配列の各要素に対して指定された関数を実行します。ただし、配列の要素は変更しません。各要素に順に処理した単一の結果を返します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
reduce(callback[, initialValue]) | 処理関数、初めて callback 関数が呼ばれるときの previousValue | 配列の各要素と前回の演算結果に対して(左から右へ)順次関数を適用し、単一の値にする。 | 値 |
reduceRight(callback[, initialValue]) | 処理関数、初めて callback 関数が呼ばれるときの previousValue | 配列の各要素と前回の演算結果に対して(右から左へ)同時に関数を適用し、単一の値にする。 | 値 |
各メソッドから呼び出される callback 関数は次のような仕様です。
要素ごとに合格しているかどうかを検査する。
引数 previousValue:初回は initialValue が指定されていれば initialValue、なければ 1つ目の要素
2回目以降は、前回の演算結果
引数 currentValue:初回は initialValue が指定されていれば1つ目の要素、なければ 2つ目の要素
2回目以降は、前回の次の要素
引数 index:要素のインデックス
引数 array:検査されている Array インスタンス
戻り値:全ての要素に演算した結果
<div id="d1"></div> <!-- 以下略 --> <script> function calculate(previousValue, currentValue, index, array) { return previousValue - currentValue; } document.getElementById("d1").textContent=[1, 2, 3, 4, 5].reduce(calculate); // -13 document.getElementById("d2").textContent=[1, 2, 3, 4, 5].reduce(calculate, 6); // -9 document.getElementById("d3").textContent=[1, 2, 3, 4, 5].reduceRight(calculate); // -5 document.getElementById("d4").textContent=[1, 2, 3, 4, 5].reduceRight(calculate, 6); // -9 </script>
一つ目は、((((1 - 2) - 3) - 4) - 5) → -13
二つ目は、(((((6 - 1) - 2) - 3) - 4) -5) → -9
三つ目は、((((5 - 4) - 3) - 2) - 1) → -5
四つ目は、(((((6 - 5) - 4) - 3) - 2) - 1) → -9
配列の要素を検索します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
includes(searchElement[, fromIndex]) | 検索する値、開始位置規定値:0 | 与えられた値が配列に含まれているかどうかを開始位置から後ろに向かって検索する。開始位置が負ならば配列要素数+開始位置から検索する。 | あれば true、なければ false |
indexOf(searchElement[, fromIndex]) | 検索する値、開始位置規定値:0 | 与えられた値が配列に含まれているかどうかを開始位置から後ろに向かって検索する。開始位置が負ならば配列要素数+開始位置から検索する。 | 見つかればその最初の位置、なければ -1 |
lastIndexOf(searchElement[, fromIndex]) | 検索する値、開始位置規定値:配列要素数 | 与えられた値が配列に含まれているかどうかを開始位置の前から前に向かって検索する。開始位置が負ならば配列要素数+開始位置から検索する。 | 見つかればその最初の位置、なければ -1 |
<span id="d01"></span><span id="d02"></span><span id="d03"></span><br> <!-- 以下略 --> <script> document.getElementById("d01").textContent=[5, 4, 3, 2, 4].includes(4); // true document.getElementById("d02").textContent=[5, 4, 3, 2, 4].includes(4, 2); // true document.getElementById("d03").textContent=[5, 4, 3, 2, 4].includes(5, -3); // false document.getElementById("d11").textContent=[5, 4, 3, 2, 4].indexOf(4); // 1 document.getElementById("d12").textContent=[5, 4, 3, 2, 4].indexOf(4, 2); // 4 document.getElementById("d13").textContent=[5, 4, 3, 2, 4].indexOf(5, -3); // -1 document.getElementById("d21").textContent=[5, 4, 3, 2, 4].lastIndexOf(4); // 4 document.getElementById("d22").textContent=[5, 4, 3, 2, 4].lastIndexOf(4, 2); // 1 document.getElementById("d23").textContent=[5, 4, 3, 2, 4].lastIndexOf(2, -3); // -1 </script>
配列の要素をつないで文字列にします。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
join([separator]) | 区切り文字規定値:"," | 配列のすべての要素を区切り文字でつないで文字列にする。 | 文字列 |
toLocaleString() | なし | 配列の要素を表す文字列を返す。要素は、toLocaleString メソッドを使用して文字列に変換され、ロケール固有の文字列で連結される。 | 文字列 |
toString() | なし | 配列の要素を表す文字列を返す。要素は、toString メソッドを使用して文字列に変換され、"," で連結される。 | 文字列 |
<div id="d01"></div> <!-- 以下略 --> <script> document.getElementById("d01").textContent=[1, 2, 3, 4, 5].join(); // 1,2,3,4,5 document.getElementById("d02").textContent=["サゴシ", "コハダ", "サワラ"].join("->"); // サゴシ->コハダ->サワラ document.getElementById("d11").textContent=[new Date(), Date.now()].toLocaleString(); // yyyy年mm月dd日 hh:mm:ss, ...(略) document.getElementById("d12").textContent=[new Date(), Date.now()].toString(); // アメリカ英語式日時文字列 </script>
Map オブジェクトは、キーと値をペアで持つ配列オブジェクトです。
キーと値は、任意の型になります。既存のキーを使用して値を追加する場合、新しい値は元の値を置き換えます。
Map インスタンスの持つプロパティとメソッドについて説明します。
指定された要素の連想配列を生成する。
引数 iterable:キー・値の対(2 要素の配列)の Array など
戻り値:Map インスタンス
<div id="d1"></div> <div id="d2"></div> <script> let mapA = new Map(); document.getElementById("d1").textContent=mapA.size; // 0 let mapB = new Map([['犬', 'dog'], ['猫', 'cat'], ['山羊', 'goat']]); document.getElementById("d2").textContent=mapB.size; // 3 </script>
要素数を表示しています。
Map インスタンスの主なプロパティについて説明します。
プロパティ | 値 |
---|---|
sizeR/O | 連想配列の要素数 |
<div id="d1"></div> <!-- 以下略 --> <script> let map = new Map(); document.getElementById("d1").textContent=map.size; // 0 map.set('犬', 'dog'); document.getElementById("d2").textContent=map.size; // 1 map.set('猫', 'cat'); document.getElementById("d3").textContent=map.size; // 2 </script>
要素数を表示しています。
Map インスタンスの主なメソッドについて説明します。
イテレータとは、一連の処理中において現在の処理位置を把握しつつ、コレクション中のアイテムへ一つずつアクセスする方法を備えたオブジェクトのことです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
entries() | なし | 連想配列内の各要素に対する key と value のペアを含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
keys() | なし | 連想配列内の各要素に対する key を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
values() | なし | 連想配列内の各要素に対する value を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
<div id="d11"></div><div id="d12"></div><div id="d13"></div> <!-- 以下略 --> <script> let map = new Map(); map.set('a', 10); map.set('b', 100); map.set('c', 50); let eMap = map.entries(); // [a,10] [b,100] [c,50] let i = 1; for (let e of eMap) { document.getElementById("d1" + i++).textContent="[" + e[0] + "," + e[1] + "]"; } eMap = map.keys(); // a b c i = 1; for (let e of eMap) { document.getElementById("d2" + i++).textContent=e; } eMap = map.values(); // 10 100 50 i = 1; for (let e of eMap) { document.getElementById("d3" + i++).textContent=e; } </script>
指定された key と value を追加します。キーあるいは値として任意の値(インスタンス、プリミティブ値とも)を使うことができます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
set(key, value) | キー、値 | 指定された key と value を追加する。 | Map インスタンス |
<div id="d1"></div> <!-- 以下略 --> <script> let map = new Map(); document.getElementById("d1").textContent=map.size; // 0 map.set('猫', 'cat'); map.set([1, 2], [100, 200, 300]); let x = {a: 1}; map.set(x, {x:100, y:200}); map.set(1, 100); document.getElementById("d2").textContent=map.size; // 4 map.set(1, 999); // 同じ 1 というキーで set する document.getElementById("d3").textContent=map.size; // 4(要素数は増えない) map.set([1, 2], [1]); // 同じ [1, 2] というキーで set する document.getElementById("d4").textContent=map.size; // 5(要素数が増える) map.set(x, {}); // 同じ {a: 1} というキーで set する document.getElementById("d5").textContent=map.size; // 5(要素数は増えない) </script>
要素数を表示しています。
set で新しい要素を追加します。ただし、同じキーを指定した場合は追加ではなく、値の更新になります。
map.set(1, 999); では、キー 1 の値を 100 から 999 にするだけなので、要素数は増えません。
しかし、map.set([1, 2], [1]); では、要素数が 4 から 5 に増えています。これは、同じ [1, 2] でもインスタンスが異なるため違うキーと判断されるからです。
map.set(x, {}); のようにインスタンスを変数に代入して行えば、もちろん同じインスタンスなので何度 set を実行しても要素数が増えることはありません。
指定された key で保存されている value を取得します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
get(key) | キー | 指定された key で保存されている value を取得する。 | 値 |
<div id="d1"></div> <!-- 以下略 --> <script> let map = new Map(); let x = {a: 1}; map.set('猫', 'cat'); map.set(1, 100); map.set(1, 999); map.set([1, 2], [100, 200, 300]); map.set(x, {x:100, y:200}); document.getElementById("d1").textContent=map.get('猫'); // cat document.getElementById("d2").textContent=map.get(1); // 999 document.getElementById("d3").textContent=map.get([1, 2])==undefined; // true document.getElementById("d4").textContent="x:" + map.get(x).x + " y:" + map.get(x).y; // x:100 y:200 document.getElementById("d5").textContent=map.get('x')==undefined; // true </script>
指定したキーの値を取り出します。同じキーで何回も set している場合は最後の値が取り出されます。キーが見つからなければ、undefined になります。
そのため、[1, 2] というキーは、値としては同じですがインスタンスが異なるため、undefined となります。
変数に入れたインスタンスで set と get をする場合は、もちろん同じインスタンスなので値を取得できます。
指定された key で保存されている value があるかどうかを検査します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
has(key) | キー | 指定された key で保存されている value があるかどうかを検査する。 | あれば true、なければ false |
<div id="d1"></div> <!-- 以下略 --> <script> let map = new Map(); let x = {a: 1}; map.set('猫', 'cat'); map.set(1, 100); map.set([1, 2], [100, 200, 300]); map.set(x, {x:100, y:200}); document.getElementById("d1").textContent=map.has('猫'); // true document.getElementById("d2").textContent=map.has(1); // true document.getElementById("d3").textContent=map.has([1, 2]); // false document.getElementById("d4").textContent=map.has(x); // true document.getElementById("d5").textContent=map.has('x'); // false </script>
指定したキーで保存された値があるかどうか検査します。存在している場合は true に、存在していなければ、false になります。
そのため、[1, 2] というキーは、値としては同じですがインスタンスが異なるため、false となります。
変数に入れたインスタンスの場合は、もちろん同じインスタンスなので true になります。
連想配列の各要素に対して指定された関数を実行します。ただし、配列の要素は変更しません。処理結果によって配列とは別のオブジェクトを変更したりします。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
forEach(callback[, thisObject]) | 処理関数、this として使用するインスタンス | 与えられた関数を配列のすべての要素に対して実行する。 | なし |
各メソッドから呼び出される callback 関数は次のような仕様です。
要素ごとに合格しているかどうかを検査する。
引数 value:要素の値
引数 key:要素のキー
引数 map:検査されている Map インスタンス
戻り値:なし
<span id="d1"></span><span id="d2"></span><span id="d3"></span> <script> function add(value, key, map) { this[key] += value; } let result = {'a':0, 'b':0, 'c':0}; let mapA = new Map(); mapA.set('a', 10); mapA.set('b', 100); let mapB = new Map(); mapB.set('a', 10); mapB.set('c', 50); mapA.forEach(add, result); mapB.forEach(add, result); document.getElementById("d1").textContent=result.a; // 20 document.getElementById("d2").textContent=result.b; // 100 document.getElementById("d3").textContent=result.c; // 50 </script>
mapA.forEach では、result の a と b にそれぞれ 10 と 100 が加えられ、mapB.forEach では、result の a と c にそれぞれ 10 と 50 が加えられます。
連想配列の要素を削除します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
clear() | なし | すべての要素を削除する。 | なし |
delete(key) | 削除する要素のキー | 指定された要素を削除する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(value, key, map) { this[0] += "[" + key + "," + value + "]"; } let s = [""]; let map = new Map(); map.set('a', 10); map.set('b', 100); map.set('c', 50); map.forEach(disp, s); document.getElementById("d1").textContent="[" + s[0] + "]"; // [[a,10][b,100][c,50]] map.delete('b'); s[0] = ""; document.getElementById("d2").textContent="[" + s[0] + "]"; // [[a,10][c,50]] map.clear(); s[0] = ""; document.getElementById("d3").textContent="[" + s[0] + "]"; // [] </script>
Set オブジェクトは、ユニークな値を持つ配列オブジェクトです。同じ値を持つことはできません。
同じ値は追加しても無視されます。
Set インスタンスの持つプロパティとメソッドについて説明します。
指定された要素の配列を生成する。
引数 iterable:値の設定された Array など
戻り値:Set インスタンス
<div id="d1"></div> <div id="d2"></div> <script> let setA = new Set(); document.getElementById("d1").textContent=setA.size; // 0 let setB = new Set(['犬', '猫', '山羊', '猫']); document.getElementById("d2").textContent=setB.size; // 3 </script>
要素数を表示しています。Set インスタンスは同じ値を持てませんので、2つ目の '猫' は追加されません。
Set インスタンスの主なプロパティについて説明します。
プロパティ | 値 |
---|---|
sizeR/O | 固有値配列の要素数 |
<div id="d1"></div> <!-- 以下略 --> <script> let set = new Set(); document.getElementById("d1").textContent=set.size; // 0 set.add('犬'); document.getElementById("d2").textContent=set.size; // 1 set.add('猫'); document.getElementById("d3").textContent=set.size; // 2 </script>
要素数を表示しています。
Set インスタンスの主なメソッドについて説明します。
イテレータとは、一連の処理中において現在の処理位置を把握しつつ、コレクション中のアイテムへ一つずつアクセスする方法を備えたインスタンスのことです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
entries() | なし | 配列内の各要素に対する [value, value] という配列を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
values() | なし | 配列内の各要素に対する value を含む新しい Iterator インスタンスを返す。 | Iterator インスタンス |
<div id="d1"></div> <div id="d2"></div> <script> let set = new Set(); set.add('a'); set.add('b'); set.add('c'); let eSet = set.entries(); // [a,a] [b,b] [c,c] let i = 1; for (let e of eSet) { document.getElementById("d1" + i++).textContent="[" + e[0] + "," + e[1] + "]"; } eSet = set.values(); // a b c i = 1; for (let e of eSet) { document.getElementById("d2" + i++).textContent=e; } </script>
指定された value を追加します。値として任意の値(インスタンス、プリミティブ値とも)を使うことができます。
また、Set インスタンスは同じ値を持てませんので、同じ値を追加しようとしても無視されます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
add(value) | 値 | 指定された value を追加する。 | Set インスタンス |
<div id="d1"></div> <!-- 以下略 --> <script> let set = new Set(); document.getElementById("d1").textContent=set.size; // 0 set.add('猫'); set.add([1, 2]); let x = {a: 1}; set.add(x); set.add(1); document.getElementById("d2").textContent=set.size; // 4 set.add(1); // 同じ 1 というキーで set する document.getElementById("d3").textContent=set.size; // 4(要素数は増えない) set.add([1, 2]); // 同じ [1, 2] というキーで set する document.getElementById("d4").textContent=set.size; // 5(要素数が増える) set.add(x); // 同じ {a: 1} というキーで set する document.getElementById("d5").textContent=set.size; // 5(要素数は増えない) </script>
要素数を表示しています。
add で新しい要素を追加します。ただし、同じキーを指定した場合は無視されます。
set.add(1); では無視されるので、要素数は増えません。
しかし、set.add([1, 2]); では、要素数が 4 から 5 に増えています。これは、同じ [1, 2] でもインスタンスが異なるため違う値と判断されるからです。
set.set(x); のようにインスタンスを変数に代入して行えば、もちろん同じインスタンスなので何度 add を実行しても要素数が増えることはありません。
指定された value があるかどうかを検査します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
has(value) | 値 | 指定された value があるかどうかを検査する。 | あれば true、なければ false |
<div id="d1"></div> <!-- 以下略 --> <script> let set = new Set(); let x = {a: 1}; set.add('猫'); set.add(1); set.add([1, 2]); set.add(x); document.getElementById("d1").textContent=set.has('猫'); // true document.getElementById("d2").textContent=set.has(1); // true document.getElementById("d3").textContent=set.has([1, 2]); // false document.getElementById("d4").textContent=set.has(x); // true document.getElementById("d5").textContent=set.has('x'); // false </script>
指定したキーで保存された値があるかどうか検査します。存在している場合は true に、存在していなければ、false になります。
そのため、[1, 2] という値は、値としては同じですがインスタンスが異なるため、false となります。
変数に入れたインスタンスの場合は、もちろん同じインスタンスなので true になります。
固有値配列の各要素に対して指定された関数を実行します。ただし、配列の要素は変更しません。処理結果によって配列とは別のインスタンスを変更したりします。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
forEach(callback[, thisObject]) | 処理関数、this として使用するインスタンス | 与えられた関数を配列のすべての要素に対して実行する。 | なし |
各メソッドから呼び出される callback 関数は次のような仕様です。
要素ごとに合格しているかどうかを検査する。
引数 value1:要素の値
引数 value2:要素の値(value1 と同じ値)
引数 set:検査されている Set インスタンス
戻り値:なし
<div id="d1"></div> <script> function count(value1, value2, set) { let range = this[0]; // [最小値, 最大値] if (value1 >= range[0] && value1 <= range[1]) this[1]++; // 件数 } let result = [[6, 10], 0]; // [[最小値, 最大値], 件数] let setA = new Set(); setA.add(6); setA.add(5); setA.add(10); setA.add(11); setA.add(7); setA.forEach(count, result); // count 関数内で result が this として扱われる document.getElementById("d1").textContent=result[1]; // 3 </script>
固有値配列の要素を削除します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
clear() | なし | すべての要素を削除する。 | なし |
delete(value) | 削除する要素の値 | 指定された要素を削除する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(value1, value2, set) { this[0] += value1 + " "; } let s = [""]; let set = new Set(); set.add('a'); set.add('b'); set.add('c'); set.forEach(disp, s); // disp 関数内で s が this として扱われる document.getElementById("d1").textContent="[" + s[0] + "]"; // [a b c] set.delete('b'); s[0] = ""; set.forEach(disp, s); // disp 関数内で s が this として扱われる document.getElementById("d2").textContent="[" + s[0] + "]"; // [a,c] set.clear(); s[0] = ""; set.forEach(disp, s); // disp 関数内で s が this として扱われる document.getElementById("d3").textContent="[" + s[0] + "]"; // [] </script>
WeakMap オブジェクトは、キーと値をペアで持つ配列オブジェクトです。既存のキーを使用して値を追加する場合、新しい値は元の値を置き換えます。
値は任意の型になりますが、Map オブジェクトと異なり、キーはインスタンスである必要があります。また、キーは他のどこからも参照されない場合、ガベージコレクションの対象になります。
例えば、"文字列" はインスタンスではありません。new String("文字列") がインスタンスです。
WeakMap インスタンスの持つプロパティとメソッドについて説明します。
指定された要素の弱参照連想配列を生成する。
引数 iterable:キー(インスタンス)・値の対(2 要素の配列)の Array など
戻り値:WeakMap インスタンス
<div id="d1"></div> <div id="d2"></div> <script> let weakmapA = new WeakMap(); document.getElementById("d1").textContent=weakmapA; // [object Object あるいは WeakMap] let k1 = new Date(2023,6,17); let k2 = new Date(2023,7,11); let weakmapB = new WeakMap([[k1, "海の日"], [k2, "山の日"]]); document.getElementById("d2").textContent=weakmapB.get(k1); // 海の日 </script>
一つ目はインスタンスを、二つ目は要素を表示しています。
WeakMap インスタンスの主なメソッドについて説明します。
指定された key と value を追加します。値として任意の値(インスタンス、プリミティブ値とも)を使うことができますが、キーはインスタンスである必要があります。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
set(key, value) | キー、値 | 指定された key と value を追加する。 | WeakMap インスタンス |
<div id="d1"></div> <!-- 以下略 --> <script> let weakmap = new WeakMap(); let k = new Date(2023,7,11); weakmap.set(k, "海の日"); document.getElementById("d1").textContent=weakmap.get(k); // 海の日 weakmap.set(k, "山の日"); document.getElementById("d2").textContent=weakmap.get(k); // 山の日 try { weakmap.set("2023/7/11", "山の日"); } catch(e) { document.getElementById("d3").textContent=e; // (例外が発生する) } </script>
要素を取り出して表示しています。
set で新しい要素を追加します。ただし、同じキーを指定した場合は追加ではなく、値の更新になります。
weakmap.set(k, "山の日"); では、値を "海の日" から "山の日" に変更していますので、 "山の日" が表示されます。
しかし、weakmap.set("2023/7/11", "山の日"); では、例外が発生しています。これは、"2023/7/11" がインスタンスではないからです。
指定された key で保存されている value を取得します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
get(key) | キー | 指定された key で保存されている value を取得する。 | 値 |
<div id="d1"></div> <!-- 以下略 --> <script> let weakmap = new WeakMap(); let k = new Date(2023,7,11); weakmap.set(k, "海の日"); weakmap.set(k, "山の日"); document.getElementById("d1").textContent=weakmap.get(k); // 山の日 document.getElementById("d2").textContent=weakmap.get(new Date(2023,7,11))==undefined; // true document.getElementById("d3").textContent=weakmap.get(new String(""))==undefined; // true </script>
指定したキーの値を取り出します。同じキーで何回も set している場合は最後の値が取り出されます。キーが見つからなければ、undefined になります。
そのため、new Date(2023,7,11) というキーは、値としては同じですがインスタンスが異なるため、undefined となります。
変数に入れたインスタンスで set と get をする場合は、もちろん同じインスタンスなので値を取得できます。
指定された key で保存されている value があるかどうかを検査します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
has(key) | キー | 指定された key で保存されている value があるかどうかを検査する。 | あれば true、なければ false |
<script> let weakmap = new WeakMap(); let k = new Date(2023,7,11); weakmap.set(k, "山の日"); document.getElementById("d1").textContent=weakmap.has(k); // true document.getElementById("d2").textContent=weakmap.has(new Date(2023,7,11)); // false document.getElementById("d3").textContent=weakmap.has(new String("")); // false </script>
指定したキーで保存された値があるかどうか検査します。存在している場合は true に、存在していなければ、false になります。
そのため、new Date(2023,7,11) というキーは、値としては同じですがインスタンスが異なるため、false となります。
変数に入れたインスタンスの場合は、もちろん同じインスタンスなので true になります。
連想配列の要素を削除します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
delete(key) | 削除する要素のキー | 指定された要素を削除する。 | なし |
<span id="d11"></span><span id="d12"></span><br> <span id="d21"></span><span id="d22"></span><br> <script> let weakmap = new WeakMap(); let k1 = new Date(2023,6,17); let k2 = new Date(2023,7,11); weakmap.set(k1, "海の日"); weakmap.set(k2, "山の日"); document.getElementById("d11").textContent=weakmap.get(k1); // 海の日 document.getElementById("d12").textContent=weakmap.get(k2); // 山の日 weakmap.delete(k1); document.getElementById("d21").textContent=weakmap.has(k1); // false document.getElementById("d22").textContent=weakmap.get(k2); // 山の日 </script>
k1 を削除したので、has(k1) では false となります。
clear() 後には k1、k2 とも false となります。
WeakSet オブジェクトは、ユニークな値を持つ配列オブジェクトです。同じ値を持つことはできません。
同じ値は追加しても無視されます。
値はインスタンスである必要があります。また、他のどこからも参照されない場合、ガベージコレクションの対象になります。
例えば、"文字列" はインスタンスではありません。new String("文字列") がインスタンスです。
WeakSet インスタンスの持つプロパティとメソッドについて説明します。
指定された要素の配列を生成する。
引数 iterable:値の設定された Array など
戻り値:WeakSet インスタンス
<div id="d1"></div> <div id="d2"></div> <script> let k1 = new Date(2023,6,17); let k2 = new Date(2023,7,11); let weaksetA = new WeakSet(); document.getElementById("d1").textContent=weaksetA; // [object WeakSet] let weaksetB = new WeakSet([k1, k2]); document.getElementById("d2").textContent=weaksetB.has(k1); // true </script>
一つ目はインスタンスを、二つ目は要素が存在するかどうかを表示しています。
WeakSet インスタンスの主なメソッドについて説明します。一般的なオブジェクト指向言語の「インスタンスメソッド」の意味合いです。
指定されたインスタンスを追加します。
また、WeakSet インスタンスは同じ値を持てませんので、同じ値を追加しようとしても無視されます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
add(value) | 値 | 指定された value を追加する。 | Set インスタンス |
<div id="d1"></div> <!-- 以下略 --> <script> let weakset = new WeakSet(); document.getElementById("d1").textContent=weakset.add(new Date(2023,6,17)); // [object WeakSet] document.getElementById("d2").textContent=weakset.add(new String("2023/7/17")); // [object WeakSet] document.getElementById("d3").textContent=weakset.add("2023/7/17"); // (例外が発生する) </script>
インスタンスを追加しています。
sweakset.add の引数はインスタンスなければいけないので、文字列を引数にすると例外が発生します。
指定された value があるかどうかを検査します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
has(value) | 値 | 指定された value があるかどうかを検査する。 | あれば true、なければ false |
<div id="d1"></div> <!-- 以下略 --> <script> let weakset = new WeakSet(); let k = new Date(2023,6,17); weakset.add(k); document.getElementById("d1").textContent=weakset.has(k); // true document.getElementById("d2").textContent=weakset.has(new Date(2023,6,17)); // false document.getElementById("d3").textContent=weakset.has("2023/7/17"); // false </script>
指定したキーで保存された値があるかどうか検査します。存在している場合は true に、存在していなければ、false になります。
そのため、new Date(2023,6,17) という値は、値としては同じですがインスタンスが異なるため、false となります。
変数に入れたインスタンスの場合は、もちろん同じインスタンスなので true になります。
弱参照連想配列の要素を削除します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
delete(value) | 削除する要素の値 | 指定された要素を削除する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> let weakset = new WeakSet(); let k = new Date(2023,6,17); weakset.add(k); document.getElementById("d1").textContent=weakset.has(k); // true set.delete(k); document.getElementById("d2").textContent=weakset.has(k); // false weakset.add(k); set.delete(new Date(2023,6,17)); document.getElementById("d3").textContent=weakset.has(k); // true </script>
指定したインスタンスを削除します。
delete(new Date(2023,6,17)) では、保存されているインスタンスと値は同じですが、インスタンスが異なるので削除されません。よって、true となります。
clear() 後には存在しませんので、false となります。
Object オブジェクトは、複数の値をまとめたものです。
オブジェクトは、プロパティと呼ばれるもので複数の値や関数をまとめて管理しています。そして各プロパティには名前が付けられています。つまりプロパティはプロパティを区別するための名前と、実際に格納される値や関数を持っています。
オブジェクトを値として記述する場合は、「{」から「}」の中にプロパティ名と値をセットにして「名前:値」「名前:関数」の形式で並べて記述します。複数記述する場合はカンマで区切ります。
var obj = {width:0, height:0, findArea:function() { return this.width * this.height; } };
なお、関数の中で、自身のプロパティを参照する場合は、this. を付ける必要があります。
オブジェクト外からオブジェクトのプロパティを参照するには、変数名、 「.」に続いてプロパティ名を記述します。プロパティ値の変更も可能です。存在しないプロパティを指定した場合には追加されます。
また、変数名["プロパティ名"] と記述することも可能です。
<div id="d1"></div> <!-- 以下略 --> <script> var obj = {width:0, height:0, findArea:function() { return this.width * this.height; } }; obj.width = 200; // width の値を変更 obj["height"] = 100; // height の値を変更 obj.unit = "㎡" // unit の追加 document.getElementById("d1").textContent=obj["width"]; // 200 document.getElementById("d2").textContent=obj.height; // 100 document.getElementById("d3").textContent=obj.findArea() + obj.unit; // 20000㎡ </script>
Object オブジェクトの持つプロパティとメソッドについて説明します。
Object オブジェクトの主なメソッドについて説明します。一般的なオブジェクト指向言語の「クラスメソッド」の意味合いです。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
assign(target, source[, ... source]) | ターゲット、ソース | ソースオブジェクトからターゲットオブジェクトへコピーし、そのオブジェクトを返す。 | Object オブジェクト |
create(proto[, propertiesObject]) | プロトタイプ、プロパティインスタンス | プロトタイプにプロパティを追加した新しいオブジェクトを生成する。 | Object オブジェクト |
プロパティオブジェクト{ "プロパティ名":ディスクリプタ[, "プロパティ名":ディスクリプタ, ... , "プロパティ名":ディスクリプタ] } | ||||||||||||||||||||||
ディスクリプタ{ value : "値", writable : true, configurable : false, enumerable : false, get : function(){}, set : function(){}, } |
|
<div id="d1"></div> <!-- 以下略 --> <script> function disp(obj) { var s = "{"; var k = Object.keys(obj); for (var i in k) { s += k[i] + ":" + obj[k[i]] + " "; } return s + "}"; } var o1 = { a:1 }; var o2 = { b:2 }; var o3 = { c:3 }; var obj; obj = Object.assign(o1, o2, o3); document.getElementById("d1").textContent=disp(obj); // { a:1, b:2, c:3 } obj = Object.create(null); document.getElementById("d2").textContent=disp(obj); // {} obj = Object.create({}, {d : {value:10,enumerable:true}}); document.getElementById("d3").textContent=disp(obj); // { d:10 } </script>
3例目の d は enumerable:true が指定してあります。これが指定されているので、disp 関数の for ... in 命令で列挙されるようになります。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
defineProperties(obj, props) | ターゲット、プロパティオブジェクト | オブジェクトに複数のプロパティを定義、変更して、そのインスタンスを返す。 | Object オブジェクト |
defineProperty(obj, prop, descriptor) | ターゲット、プロパティ、ディスクリプタ | オブジェクトに個別に指定したプロパティを定義、変更して、そのインスタンスを返す。 | Object オブジェクト |
プロパティオブジェクト{ "プロパティ名":ディスクリプタ[, "プロパティ名":ディスクリプタ, ... , "プロパティ名":ディスクリプタ] } | ||||||||||||||||||||||
ディスクリプタ{ value : "値", writable : true, configurable : false, enumerable : false, get : function(){}, set : function(){}, } |
|
<div id="d1"></div> <!-- 以下略 --> <script> function disp(obj) { var s = "{"; var k = Object.keys(obj); for (var i in k) { s += k[i] + ":" + obj[k[i]] + " "; } return s + "}"; } var obj = {}; Object.defineProperties(obj, { "prop1": { value:true, writable:true, enumerable:true }, "prop2": { value:"Hello", writable:false, enumerable:true } }); document.getElementById("d1").textContent=disp(obj); // {prop1:true prop2:Hello } Object.defineProperties(obj, { "prop1": { value:false, writable:true, enumerable:true }, "prop3": { value: 100, writable:true, enumerable:true } }); document.getElementById("d2").textContent=disp(obj); // {prop1:false prop2:Hello prop3:100 } Object.defineProperty(obj, "prop3", {value:200}); document.getElementById("d3").textContent=disp(obj); // {prop1:false prop2:Hello prop3:200 } Object.defineProperty(obj, "prop2", {value:"Good-bye"}); document.getElementById("d4").textContent=disp(obj); // (例外が発生する) </script>
最初の例では、prop1 と prop2 を定義しています。
二つ目の例では、prop1 と prop3 を定義していますが、prop1 は既に定義済みで writable:true なので、prop1 が変更になります。
三つ目の例では、prop3 が既に定義済みで writable:true なので、やはり prop3 が変更になります。
最後の例は、prop2 も既に定義済みですが writable:false なので、変更できず例外が発生します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
getOwnPropertyDescriptor(obj, prop) | 対象オブジェクト、プロパティ名 | 指定されたプロパティをオブジェクトから取り出し、そのディスクリプタを返す。 | プロパティディスクリプタ |
getOwnPropertyNames(obj) | 対象オブジェクト | すべてのプロパティ名 (列挙可能・不可能を問わず) の配列を返す。 | プロパティ名の配列 |
keys() | 対象オブジェクト | 列挙可能なプロパティ名(key)の配列を返す。 | プロパティ名の配列 |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(obj) { var s = "{"; var k = Object.keys(obj); for (var i in k) { s += k[i] + ":" + obj[k[i]] + " "; } return s + "}"; } var obj = {}; var arr = ["a", "b", "c"]; var value; Object.defineProperties(obj, { "prop1": { value:"Hello", writable:true, enumerable:false }, "prop2": { get:function() { return value; }, set:function(v) { value = v; }, enumerable:true } }); document.getElementById("d1").textContent=disp(Object.getOwnPropertyDescriptor(obj, "prop1")); document.getElementById("d2").textContent=disp(Object.getOwnPropertyDescriptor(obj, "prop2")); document.getElementById("d3").textContent=Object.getOwnPropertyNames(obj); document.getElementById("d4").textContent=Object.getOwnPropertyNames(arr); document.getElementById("d5").textContent=Object.keys(obj); </script>
最初の例では、prop1 のプロパティディスクリプタを表示しています。
二つ目の例では、prop2 のプロパティディスクリプタを表示しています。
三つ目の例では、obj のプロパティ名を表示しています。列挙可能・不可能を問わずすべてのプロパティ名が得られます。
四つ目の例では、配列 arr のプロパティ名を表示しています。配列の要素番号がプロパティ名として表示されています。また、最後に length というプロパティがあることがわかります。
最後の例では、三つ目の例と同じく obj のプロパティ名を表示していますが、列挙可能なプロパティ名しか得られません。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
freeze(obj) | 対象オブジェクト | プロパティの追加、削除、変更をできなくする。 | 対象オブジェクト |
preventExtensions(obj) | 対象オブジェクト | 新しいプロパティの追加をできなくする。削除はできる。 | 対象オブジェクト |
seal(obj) | 対象オブジェクト | プロパティの追加、削除をできなくする。プロパティの値は、書き込み可能である限り変更できる。 | 対象オブジェクト |
<span id="d11"></span><span id="d12"></span><span id="d13"></span><br> <span id="d21"></span><span id="d22"></span><br> <span id="d23"></span><span id="d24"></span><br> <span id="d31"></span><span id="d32"></span><br> <span id="d33"></span><span id="d34"></span><br> <script> var obj = {}; Object.defineProperties(obj, { "prop1": { value:"One", writable:true, enumerable:true }, "prop2": { value:"Two", writable:true, enumerable:true }, "prop3": { get: function() { return value; }, set: function(v) { value = v; }, enumerable:true } }); obj.prop1 = "un"; Object.freeze(obj); // -------------------------------------------------------------------------------- obj.prop2 = "deux"; obj.prop3 = "trois"; document.getElementById("d11").textContent=obj.prop1; document.getElementById("d12").textContent=obj.prop2; document.getElementById("d13").textContent=obj.prop3; var obj2 = {}; Object.defineProperty(obj2, "prop1", { value: "One", configurable: true }); document.getElementById("d21").textContent=obj2.prop1; Object.preventExtensions(obj2); // ---------------------------------------------------------------------- obj2.prop1 = "un"; document.getElementById("d23").textContent=obj2.prop1; try { Object.defineProperty(obj2, "prop2", { value: "Two" }); } catch(e) {document.getElementById("d22").textContent=e;} // prop2 は freeze の後なので変更できない delete obj2.prop1; // 削除できる document.getElementById("d24").textContent=obj2.prop1; // 削除されたので、値が表示されない(undefined と表示される) var obj3 = {}; Object.defineProperty(obj3, "prop1", { value: "One", configurable: true }); document.getElementById("d31").textContent=obj3.prop1; Object.seal(obj3); // ----------------------------------------------------------------------------------- obj3.prop1 = "un"; document.getElementById("d33").textContent=obj3.prop1; try { Object.defineProperty(obj3, "prop2", { value: "Two"); } catch(e) {document.getElementById("d32").textContent=e;} // prop2 は seal の後なので追加できない delete obj3.prop1; // 削除できない document.getElementById("d34").textContent=obj3.prop1; // 削除できなかったので、元の値が表示される </script>
最初の例では、prop1 は freeze の前なので値を変更できますが、prop2 は freeze の後なので変更できません。ただし、prop3 のように set では変更できます。
二つ目の例では、prop1 は preventExtensions の前なので追加できますが、prop2 は preventExtensions の後なので追加できません。ただし、値の変更やプロパティの削除はできます。
最後の例では、prop1 は seal の前なので追加できますが、prop2 は seal の後なので追加できません。また、prop1 の削除もできません。ただし、値の変更はできます。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
getPrototypeOf(obj) | 対象オブジェクト | オブジェクトのプロトタイプを得る。 | プロトタイプ |
setPrototypeOf(obj, prototype) | 対象オブジェクト、プロトタイプ | オブジェクトのプロトタイプを変更する。 | なし |
<div id="d1"></div> <!-- 以下略 --> <script> function disp(obj) { var s = "{"; var k = Object.keys(obj); for (var i in k) { s += k[i] + ":" + obj[k[i]] + " "; } return s + "}"; } var proto1 = { "One": "unv", "Two": "deux" }; var proto2 = { "One": "eins", "Two": "zwei" }; var obj = Object.create(proto1); var x = Object.getPrototypeOf(obj); // ------------------------------------------------ document.getElementById("d1").textContent=disp(x); Object.setPrototypeOf(obj, proto2); // ------------------------------------------------ var x = Object.getPrototypeOf(obj); document.getElementById("d2").textContent=disp(x); </script>
最初の例は、proto1 をプロトタイプとして obj を生成しています。
二つ目の例は、obj のプロトタイプを proto2 に変更しています。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
is(value1, value2) | 値、値 | 2 つの値を比較する。 | 同一ならば true、そうでないならば false |
isExtensible(obj) | 対象オブジェクト | 拡張可能であるかどうかを調べる。 | 拡張可能ならば true、そうでないならば false |
isFrozen(obj) | 対象オブジェクト | 設定変更不可で、すべてのプロパティが書き込み不可かどうかを調べる。 | 書き込み不可ならば true、そうでないならば false |
isSealed(obj) | 対象オブジェクト | 拡張不可で、すべてのプロパティが設定変更不可かどうかを調べる。 | 設定変更不可ならば true、そうでないならば false |
<span id="d11"></span><span id="d12"></span><br> <!-- 以下略 --> <script> var obj1 = { "One": "unv", "Two": "deux" }; var obj2 = { "One": "unv", "Two": "deux" }; try { document.getElementById("d11").textContent=Object.is(obj1, obj2); document.getElementById("d12").textContent=Object.is(obj1, obj1); } catch(e) {document.getElementById("d11").textContent=e;} try { Object.preventExtensions(obj2); // ------------------------------------------------ document.getElementById("d21").textContent=Object.isExtensible(obj1); document.getElementById("d22").textContent=Object.isExtensible(obj2); } catch(e) {document.getElementById("d21").textContent=e;} try { Object.freeze(obj2); // ------------------------------------------------ document.getElementById("d31").textContent=Object.isFrozen(obj1); document.getElementById("d32").textContent=Object.isFrozen(obj2); } catch(e) {document.getElementById("d31").textContent=e;} try { Object.seal(obj2); // ------------------------------------------------ document.getElementById("d41").textContent=Object.isSealed(obj1); document.getElementById("d42").textContent=Object.isSealed(obj2); } catchh(e) {document.getElementById("d41").textContent=e;} </script>
最初の例では、同じ内容でもインスタンスが異なれば false になることを示しています。
二つ目以降の例では、preventExtensions、freeze や seal を実行していないインスタンスと実行したインスタンスを検査しています。
Object インスタンスの持つプロパティとメソッドについて説明します。
値が null や undefined の場合、空のインスタンスを生成して返します。それ以外の場合、与えられた値に対応する型のインスタンスを返します。値が元々インスタンスだった場合には、その値自体を返します。
引数 value:値
戻り値:Object インスタンス
<div id="d1"></div> <div id="d2"></div> <script> let objA = new Object(); document.getElementById("d1").textContent=objA; // [object Object] let objB = new Object(1); document.getElementById("d2").textContent=objB; // 1 </script>
メソッド | 引数 | 機能 | 戻り値 | ||||||
---|---|---|---|---|---|---|---|---|---|
hasOwnProperty(prop) | プロパティ名 | インスタンスの直接のプロパティとして存在しているかどうかを調べる。 | 存在しているならば true、そうでないならば false | ○ | ○ | ○ | ○ | ○ | ○ |
propertyIsEnumerable(prop) | プロパティ名 | 列挙可能かどうかをを調べる。 | 可能ならば true、そうでないならば false | △ | △ | △ | △ | △ | △ |
<span id="d11"></span><span id="d12"></span><br> <!-- 以下略 --> <script> var obj1 = { "One": {value:"unv", enumerable:true }, "Two": {value:"deux", enumerable:false } }; document.getElementById("d11").textContent=obj1.hasOwnProperty("One"); // true document.getElementById("d12").textContent=obj1.hasOwnProperty("Three"); // false document.getElementById("d21").textContent=obj1.propertyIsEnumerable("One"); // true document.getElementById("d22").textContent=obj1.propertyIsEnumerable("Two"); // false document.getElementById("d23").textContent=obj1.propertyIsEnumerable("Three"); // false </script>
最初の例は、obj1 には One はありますが Three はありません。
二つ目の例では、enumerable は One では true ですが Two では false です。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toLocaleString() | なし | toString() を呼び出す。 (インスタンスの内容を言語やオプションに沿った文字列にして返すためにオーバーライド(上書き)される関数) | インスタンスを表す文字列 |
toString() | なし | インスタンスを表した文字列を返す。 (インスタンスの内容を文字列にして返すためにオーバーライド(上書き)される関数) | インスタンスを表した文字列 |
<span id="d11"></span><span id="d12"></span><br> <span id="d21"></span><span id="d22"></span><br> <script> var obj = {date:new Date(2023,6,17), event:"海の日"}; document.getElementById("d11").textContent=obj.toLocaleString(); // [object Object] document.getElementById("d21").textContent=obj.toString(); // [object Object] Object.prototype.toLocaleString = function() { return "{" + this.date.toLocaleDateString() + "," + this.event + "}"; } Object.prototype.toString = function() { return "{" + this.date + "," + this.event + "}"; } document.getElementById("d12").textContent=obj.toLocaleString(); // {2023年7月17日,海の日} document.getElementById("d22").textContent=obj.toString(); // {Mon Jul 17 2023 00:00:00 GMT+0900 (日本標準時),海の日} </script>
どちらの例も、最初は デフォルトの toString 関数などが返す [object Object] が表示されます。
デフォルトの toString に変わる関数を定義した後は、インスタンスの内容を表示しています。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
valueOf() | なし | インスタンスのプリミティブな値を返す。 | プリミティブな値 |
<span id="d11"></span><span id="d12"></span><br> <script> var obj = {date:new Date(2023,6,17), event:"海の日"}; document.getElementById("d11").textContent=obj.valueOf(); // [object Object] Object.prototype.valueOf = function() { return this.date.getTime(); } document.getElementById("d12").textContent=obj.valueOf(); // 1689519600000 </script>
最初は デフォルトの valueOf 関数などが返す [object Object] が表示されます。
デフォルトの valueOf に変わる関数を定義した後は、インスタンスのプリミティブな値(この例では経過ミリ秒)を表示しています。
Boolean オブジェクトは、真偽値をオブジェクトとして扱うためのラッパーオブジェクトです。
Boolean インスタンスの持つプロパティとメソッドについて説明します。
Boolean インスタンスを生成する。
value が、0、-0、null、false、NaN、undefined、および空文字("")は false として、その他の値は true の初期値を持つインスタンスを生成します。
引数 value:値
戻り値:Boolean インスタンス
<div id="d1"></div> <!-- 以下略 --> <script> document.getElementById("d1").textContent=new Boolean(); document.getElementById("d2").textContent=new Boolean(0); document.getElementById("d3").textContent=new Boolean(-0); document.getElementById("d4").textContent=new Boolean(null); document.getElementById("d5").textContent=new Boolean(false); document.getElementById("d6").textContent=new Boolean(NaN); document.getElementById("d7").textContent=new Boolean(undefined); document.getElementById("d8").textContent=new Boolean(""); document.getElementById("d11").textContent=new Boolean(1); document.getElementById("d12").textContent=new Boolean(true); document.getElementById("d13").textContent=new Boolean("false"); </script>
Internet Explorer ではすべてが true となります。
ただし、次の実行例のように表示は正しくないですが、値は正しく設定されているようです。
<div id="d1"></div> <!-- 以下略 --> <script> let f = new Boolean(false); document.getElementById("d1").textContent=f; document.getElementById("d2").textContent=(f == false ? "FALSE" : "TRUE"); let t = new Boolean(true); document.getElementById("d11").textContent=t; document.getElementById("d12").textContent=(t == true ? "TRUE" : "FALSE"); </script>
2つ目と4つ目は分かりにくいですが、ともに条件が成り立った時に選択される文字列が表示されています。
例えば2つ目は、表示が FALSE ならば、new Boolean(false) の戻り値が false であったということです。
Error オブジェクトはユーザー定義例外のスーパークラスとして使うこともできます。
また、Error オブジェクトのインスタンスは実行時エラーが発生すると投げられます。Javascript は、次のような例外を発生する可能性があります。
クラス | 発生する場面 |
---|---|
EvalError | グローバル関数 eval() が不適切に使用された場合 |
InternalError | JavaScriptエンジン内部で起きた場合 |
RangeError | 関数に対して引数として許容されない範囲の数値を渡そうとした場合 |
ReferenceError | 宣言されていない変数を読み出そうとした場合 |
SyntaxError | コードをパース中に言語の構文に従わないトークン又はトークン順序に遭遇した場合 |
TypeError | ある演算子又は関数が期待する型と互換性の無いオペランド又は引数がその関数に渡された場合 |
URIError | 奇妙な形のURIに遭遇した場合 |
Error インスタンスの持つプロパティとメソッドについて説明します。
エラーインスタンスを生成します。
Error インスタンスを生成する。
引数 message:エラーの説明 規定値:""
引数 fileName:エラーの発生したファイルの名前 規定値:Error を呼び出したファイルの名前
引数 lineNumber:エラーの発生した行番号 規定値:Error を呼び出した行番号
戻り値:Error インスタンス
プロパティ | 値 |
---|---|
message | エラーメッセージ |
name | エラーインスタンス名 |
<span id="d1"></span> <span id="d2"></span> <script> try { throw new Error("エラー", "xxxx.htm", 10); } catch(e) { document.getElementById("d1").textContent=e.message; document.getElementById("d2").textContent=e.name; } </script>
message と name を表示しています。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
toString() | なし | 特定の Error インスタンスを表す文字列を返す。 | Error インスタンスを表す文字列 |
<div id="d1"></div> <script> try { xxx(); // 未定義 } catch(e) { document.getElementById("d2").textContent=e.toString(); } </script>
xxx() が宣言されていませんので、例外が発生します。
JavaScript におけるすべての関数は、実際には Function オブジェクトです。
Function インスタンスの持つプロパティとメソッドについて説明します。
新規の Function インスタンスを生成します。
Function インスタンスを生成する。
引数 arg1~argN:仮引数の名前
引数 functionBody:関数定義
以下の3つの関数(add1、add2、add3)はすべて Function インスタンスです。
<span id="d11"></span> <span id="d12"></span><br> <span id="d21"></span> <span id="d22"></span><br> <span id="d31"></span> <span id="d32"></span><br> <script> var add1 = new Function("a", "b", "return a + b;"); var add2 = function(a, b) { return a + b; } function add3(a, b) { return a + b; } document.getElementById("d11").textContent=add1(1, 2); document.getElementById("d12").textContent=add1 instanceof Function; document.getElementById("d21").textContent=add2(1, 2); document.getElementById("d22").textContent=add2 instanceof Function; document.getElementById("d31").textContent=add3(1, 2); document.getElementById("d32").textContent=add3 instanceof Function; </script>
プロパティ | 値 |
---|---|
caller | 呼び出し元の関数 |
length | 関数が期待する引数の数 |
name | 関数の名前 |
<span id="d11"></span> <span id="d12"></span><br> <span id="d21"></span><br> <span id="d31"></span> <span id="d32"></span> <span id="d33"></span><br> <script> var f1 = function func() { return func.caller == null ? "null" : func.caller; } var f2 = function() { return f1(); } var f3 = new Function("a", "b", "return a + b;"); document.getElementById("d11").textContent=f1(); document.getElementById("d12").textContent=f2(); document.getElementById("d21").textContent=f3.length; document.getElementById("d31").textContent=f1.name; document.getElementById("d32").textContent=f2.name; document.getElementById("d33").textContent=f3.name; </script>
caller の値は、トップレベルから呼び出された場合は null に、関数から呼び出された場合はその関数のコードになります。
name の値は、Function で定義した場合は anonymous、function の後ろに名前が記述されている場合はその名前に、記述されていなければ代入された変数名になります。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
apply(this,valueList) | this 参照値、 関数に渡される引数の配列 | 与えられた this 参照値と、配列の形で与えられた引数を用いて関数を呼び出す。 | this 参照値と引数を指定して関数を呼び出した結果 |
bind(this,value[,value[, ...]]) | this 参照値、 関数に渡される引数 | 与えられた引数を引数とする関数を新しく生成する。 | 生成された関数 |
call(this,value[,value[, ...]]) | this 参照値、 関数に渡される引数 | 与えられた this 参照値と引数を用いて関数を呼び出す。 | this 参照値と引数を指定して関数を呼び出した結果 |
this 参照値がインスタンスではなく null や undefined のときはグローバルオブジェクトである Window インスタンスに置き換わります。なお、this 参照値については、「7.5 this」 を参照してください。
<span id="d1"></span><br> <span id="d2"></span><br> <span id="d3"></span><br> <script> var add = new Function("var sum = 0;for (var i = 0 ; i < arguments.length ; i++) sum += arguments[i]; return sum;"); document.getElementById("d1").textContent=add.apply(null,[1,2,3]); var f = add.bind(null,1,2,3); // 1,2,3 を引数とする関数を生成 document.getElementById("d2").textContent=f(4,5); // add.call(null,1,2,3,4,5) と同じ document.getElementById("d3").textContent=add.call(null,1,2,3); </script>
インターネット上の HTML や画像などといったリソースの場所を特定するためのオブジェクトです。
URL は次のような構造をしています(必要に応じて省略できます)。
[スキーム]://[ホスト]:[ポート][パス][ファイル]?[パラメータ][ハッシュ]
URL オブジェクトの持つメソッドについて説明します。
URL.createObjectURL() メソッドは、引数で指定されたオブジェクトを表す URL を含む文字列を生成します。URL の寿命は、それを作成したドキュメントが表示されている間です。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
createObjectURL(object) | File、Blob、MediaSourceオブジェクト | 引数で指定されたオブジェクトを表す URL を含む文字列を生成する | URL を含む文字列 |
<span id="d1"></span><br> <script> var blob = new Blob([JSON.stringify({hello: "world"}, null, 2)], {type : "application/json"}); d1.textContent = URL.createObjectURL(blob); var file = new File(["foo"], "sample.txt", {type: "text/plain"}); d2.textContent = URL.createObjectURL(file); var mediaSource = new MediaSource(); d3.textContent = URL.createObjectURL(mediaSource); </script>
URL オブジェクトの持つメソッドについて説明します。
新規の URL インスタンスを生成します。
引数によって定義された URL を表す新しく生成された URL インスタンスを生成する。
引数 url:リソースの場所を特定する URL
引数 base:url のベースとなるパスを示す文字列 (規定値:"") (注)
戻り値:URL オブジェクト
(注)URL インスタンスも指定できますが、その場合は、href 属性に設定されている URL が参照されます。引数の url と base から新しい URL を生成しますが、5つ目の例のように正しくなくてもルートからの URL にしてくれるみたいです。
ちなみに、base の最後の文字が "/" でなければ最後の名前はフォルダではなくファイルと見なされるようです。
<span id="d01"></span><br> <!-- 以下略 --> <script> var url = new URL("http://foo.co.jp/aaa/111.htm"); d01.textContent = url.href; url = new URL("/aaa/222.htm", "http://foo.co.jp/xxx/yyy/111.htm"); d02.textContent = url.href; url = new URL("../bbb/222.htm", "http://foo.co.jp/aaa/yyy/zzz/111.htm"); d03.textContent = url.href; url = new URL("ccc/222.htm", "http://foo.co.jp/aaa/bbb/111.htm"); d04.textContent = url.href; url = new URL("../../../bbb/222.htm", "http://foo.co.jp/aaa/xxx/111.htm"); d05.textContent = url.href; try { url = new URL("/bbb/222.htm"); d11.textContent = url.href; } catch(err) { d11.textContent = err; } try { url = new URL("bbb/222.htm", "foo/111.htm"); d12.textContent = url.href; } catch(err) { d12.textContent = err; } </script>
プロパティ | 値 |
---|---|
originR/O | オリジン(スキーム、ホスト、ポート) |
searchParamsR/O | 引数情報(URLSearchParams オブジェクト) |
href | 完全なアドレス |
protocol | プロトコル |
host | ホスト |
hostname | ホスト:ポート |
port | ポート |
pathname | パス |
search | ? 以降に記述されているファイルへの引数 |
hash | # 以降に記述されているファイル内に記述されている ID |
<span id="d01"></span><br> <!-- 以下略 --> <script> var url = new URL("http://foo.co.jp:8080/aaa/111.htm?on&parm=10#entry"); d01.textContent = url.origin; d02.textContent = url.searchParams; d03.textContent = url.href; d04.textContent = url.protocol; d05.textContent = url.host; d06.textContent = url.hostname; d07.textContent = url.port; d08.textContent = url.pathname; d09.textContent = url.search; d10.textContent = url.hash; </script>
Web ページからエンドユーザーに表示するシステム通知を制御します。
これらのシステム通知は「アクションセンター」などのブラウザの外に表示されるため、ユーザーがタブを切り替えたり、別のアプリに移動していたとしても表示されます。
注意
使用している Web サーバーのセキュリティ制御により、このページを https://wasika.noor.jp/html/h3/h309/h309.htm で開かないと、通知はできないようです。
Notification オブジェクトの持つメソッドについて説明します。
現在の許可を表す文字列です。
プロパティ | 値 | ||||||
---|---|---|---|---|---|---|---|
permission | 現在の許可を表す文字列
|
現在の許可状況を表示します。許可の状況が変更になったときの値は次の requestPermission() メソッドの例を参照してください。
<span id="d1"></span><br> <script> d1.textContent = Notification.permission; </script>
Notification.requestPermission() メソッドは、通知を表示できるようにユーザに許可を要求します。
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
requestPermission([関数]) | 関数:許可・不許可の選択後に呼び出される関数 | 通知を表示できるようにユーザに許可を要求する(注)許可を求めるダイアログが表示されますが、一度 [許可] か [ブロック] をクリックするとその後は表示されません。 | なし |
メソッドから呼び出される関数は次のような仕様です。
ユーザーが許可不許可を選んだ時に呼び出される関数。引数に何を選択したかが渡される。
引数 許可:許可の種類(文字列)
granted | 許可([許可]ボタンのクリック) |
denied | 拒否([ブロック]ボタンのクリック) |
default | 確認(× のクリック)ただし、3回繰り返すと無条件に denied になる |
戻り値:なし
次の例は通知の許可・不許可をユーザに問い合わせます。ユーザは「許可」、「ブロック」を選択できます。ただし、一度決定してしまうとダイアログは表示されなくなります。再度ダイアログを表示するには、「確認(デフォルト)」に戻す必要があります。
<button class="button" onclick="request();">通知の許可</button> <span id="d1"></span><br> <button class="button" onclick="permission();">現在の許可</button> <span id="d2"></span><br> <script> function request() { Notification.requestPermission(function(permission) { d1.textContent = permission; }); } function permission() { d2.textContent = Notification.permission; }); } </script>
Notification オブジェクトの持つメソッドについて説明します。
新規の Notification インスタンスを生成し、通知を表示します。
通知のための新しく生成された Notification インスタンスを生成し、通知を表示する。
引数 title:通知のためのタイトル
引数 options:通知に適用する設定を含むオプションオブジェクト
dir | 通知文章の方向(ltr:左から右、rtl:右から左)(規定値:auto) |
lang | 通知の言語(言語コード一覧) |
badge | 通知自体を表示する空間が充分にない場合に通知を表す画像の URL |
body | 通知の本文 |
tag | 通知のための識別タグ(同じタグは同じ場所に表示される) |
icon | アイコンのURL |
image | 本文の下に表示される画像 |
data | 任意のデータ |
vibrate | バイブレーションパターン |
requireInteraction | |
silent | 通知が'sticky'(true)そうでない(false)(規定値:false) |
戻り値:Notification オブジェクト
画面の右下に通知が表示されます。そして、一定時間が過ぎると消えます。表示時間はブラウザによって異なります。
ただし、Windows10 の場合、すでに通知がアクションセンターにある場合には表示されないことがあります。そのときは「すべての通知をクリア」などをクリックして、通知を消してください。
では image は表示されないようです。
また、 では icon の大きさにも制限があるようですし、すべてで badge は表示されないようです。
<button class="button" onclick="notify();">通知</button> <br> <script> var n; Notification.requestPermission(); function notify() { n = new Notification( "くま", { dir: 'ltr', lang: 'jp', badge: 'images/JSs.png', body: 'クマ科に属する哺乳類の総称である。体はよく肥え、がんじょうで、毛はあらい。', tag: 'tag', icon: 'figures/book.png', image: 'figures/bear.png', data: { xxx: '任意のデータ' }, silent: true, } ); } </script>
タグが付加されていない場合や異なる名前のタグが付いている場合は別の通知と見なされ表示を待つ列に加えられます。そして、前の通知の表示が消えると次の通知が表示されることになります。ただし、OSやブラウザによって表示のされ方は異なります。
また、同じ名前のタグが付いている場合はその通知がすでに表示されている場合は、前の通知を閉じて新しい通知を表示します。
次の例のボタンをそれぞれ何回かクリックしてみてください。
<button class="button" onclick="notify(1);">異なる tag 通知</button> <button class="button" onclick="notify(0);">同じ tag 通知</button><br> <script> var n; Notification.requestPermission(); var titleNo = 0; var tagNo = 0; function notify(inc) { n = new Notification( "くま" + titleNo, { body: 'クマ科に属する哺乳類の総称である。', tag: 'tag' + tagNo, icon: 'figures/bear.png', silent: true, } ); titleNo++; tagNo += inc; } </script>
異なる tag 通知のときの表示のされ方(Windows10 のとき)
「アクションセンター」に、前の通知の上に重ならないように表示される 規定値として3つ(表示を増やしてすべてを見ることもできる) |
画面右下に、前の通知の上に重ならないように表示される 規定値として3つ(通知を消せば次の通知を見ることもできる) |
プロパティ | 値 | ||||||
---|---|---|---|---|---|---|---|
dirR/O | 通知文章の方向(ltr:左から右、rtl:右から左)(規定値:auto) | ○ | ○ | ○ | ○ | ○ | ○ |
langR/O | 通知の言語(言語コード一覧) | ○ | ○ | ○ | ○ | ○ | ○ |
badgeR/O | ○ | ○ | × | ○ | ○ | ○ | |
bodyR/O | 通知の本文 | ○ | ○ | ○ | ○ | ○ | ○ |
tagR/O | 通知の識別タグ(同じタグは同じ場所に表示される) | ○ | ○ | ○ | ○ | ○ | ○ |
iconR/O | アイコンのURL | ○ | ○ | ○ | ○ | ○ | ○ |
imageR/O | 本文の下に表示される画像のURL | ○ | ○ | × | ○ | ○ | ○ |
dataR/O | 任意のデータ | ○ | ○ | ○ | ○ | ○ | ○ |
vibrateR/O | バイブレーションパターン | ○ | ○ | ○ | ○ | ○ | ○ |
requireInteractionR/O | ○ | ○ | ○ | ○ | ○ | ○ | |
silentR/O | 通知が'sticky'(true)そうでない(false)(規定値:false) | ○ | ○ | × | ○ | ○ | ○ |
timestampR/O | 通知の日時(ミリ秒) | ○ | ○ | ○ | ○ | ○ | ○ |
<button class="button" onclick="notify();">通知</button> <br> <span id="d01"></span><br> <!-- 以下略 --> <script> var n; Notification.requestPermission(); function notify() { n = new Notification( "くま", { dir: 'ltr', lang: 'jp', badge: 'images/JSs.png', body: 'クマ科に属する哺乳類の総称である。体はよく肥え、がんじょうで、毛はあらい。', tag: 'tag', icon: 'figures/book.png', image: 'figures/bear.png', data: { xxx: '任意のデータ' }, silent: true, } ); d01.textContent = n.title; d02.textContent = n.dir; d03.textContent = n.lang; d04.textContent = n.badge; d05.textContent = n.body; d06.textContent = n.tag; d07.textContent = n.icon; d08.textContent = n.image; d09.textContent = n.data.xxx; d10.textContent = n.silent; d11.textContent = new Date(n.timestamp).toLocaleString(); } </script>
メソッド | 引数 | 機能 | 戻り値 |
---|---|---|---|
close() | なし | 通知を閉じる | なし |
[通知]ボタンを何回かクリックした後、[閉じる]ボタンをクリックしてください。下の例では、先に表示された通知から閉じます。
<button class="button" onclick="notify();">通知</button><br> <button id="c" class="button" onclick="notificationClose();" style="disabled:true;">閉じる</button> <script> var nstack = []; Notification.requestPermission(); var no = 0; function notify() { var n = new Notification( "くま" + no++, { body: 'クマ科に属する哺乳類の総称である。', icon: 'figures/bear.png', silent: true } ); nstack.push(n); c.disabled = false; } function notificationClose() { var n = nstack.shift(); n.close(); if (nstack.length <= 0) { c.disabled = true; } } </script>