引数 string に含まれる数値の基数を表す 2 ~ 36 の範囲の値を指定します。省略した場合、先頭に "0x" が付いている文字列は 16 進数、"0" が付いている文字列は 8 進数と見なされます。これ以外の文字列は、10 進数と見なされます。
スペース文字を挿入して整理される。
返値
(JSON)オブジェクトをJSON文字列に変換して返します。
参照
例
var foo = {bar: "new property", baz: 3};
var jsonString = JSON.stringify(foo);
print(jsonString); // {"bar":"new property","baz":3}
//---
function censor(key, value) {
if (typeof(value) == "string") {
return undefined;
}
return value;
}
var jsonString = JSON.stringify(foo, censor);
print(jsonString); // {"baz":3}
//---
var jsonString = JSON.stringify(foo, ["bar"]);
print(jsonString); // {"bar":"new property"}
//---
var jsonString = JSON.stringify(foo, null, " ");
print(jsonString);
/*
{
"bar": "new property",
"baz": 3
}*/
JSON文字列変換時、プロパティ値を変換する作用素
例
var x = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
var y = {name: "Jon", age: 20};
var json = JSON.stringify({a: x, b: y});
print(json); // {"a":"bar","b":{"name":"Jon","age":20}}
数学上の関数や定数がMathモジュールから呼び出したり、値を取り出すことができます。
E定数 |
Euler定数 |
LN2定数 |
2 の自然対数。0.693... |
LN10定数 |
10 の自然対数。2.302... |
LOG2E定数 |
2 を底とした E の対数。1.442... |
LOG10E定数 |
10 を底とした E の対数。0.434... |
PI定数 |
円周率 π |
SQRT1_2定数 |
1/2 の平方根。つまり、1 割る 2 の平方根。0.707... |
SQRT2定数 |
2 の平方根。1.414... |
abs関数 |
絶対値を計算 |
acos関数 |
アークコサインを計算 |
asin関数 |
アークサインを計算 |
atan関数 |
アークタンジェントを計算 |
atan2関数 |
X軸から座標 (x,y) までのラジアン単位の角度を計算 |
ceil関数 |
等しいかまたはそれより大きい値となる最小の整数を計算 |
cos関数 |
コサインを計算 |
exp関数 |
e (自然対数の底) の累乗を計算 |
floor関数 |
等しいかまたはそれより小さい値となる最大の整数を計算 |
log関数 |
自然対数を計算 |
max関数 |
最大数を計算 |
min関数 |
最小数を計算 |
pow関数 |
累乗計算 |
random関数 |
0 ~ 1 の範囲での擬似乱数を計算 |
round関数 |
最も近い整数を計算 |
sin関数 |
サインを計算 |
sqrt関数 |
平方根を計算 |
tan関数 |
タンジェントを計算 |
toSource関数 |
"Math" という文字列を返します。 |
Euler定数
解説
自然対数の底(e) 2.718...
log(2)
解説
2 の自然対数。0.693...
log(10)
解説
10 の自然対数。2.302...
log2(e)
解説
2 を底とした E の対数。1.442...
log10(e)
解説
10 を底とした E の対数。0.434...
円周率 π
解説
3.14159...
1/sqrt(2)
解説
1/2 の平方根。つまり、1 割る 2 の平方根。0.707...
sqrt(2)
解説
2 の平方根。1.414...
絶対値を計算
引数
n : Number
数値
返値
指定された数値の絶対値を返します。
アークコサインを計算
引数
n : Number
数値
返値
指定された数値のアークコサインを返します。
参照
アークサインを計算
引数
n : Number
数値
返値
指定された数値のアークサインを返します。
参照
アークタンジェントを計算
引数
n : Number
数値
返値
指定された数値のアークタンジェントを返します。
参照
X軸から座標 (x,y) までのラジアン単位の角度を計算
引数
y, x : Number
数値
返値
X軸から座標 (x,y) までのラジアン単位の角度(-π~π)を返します。
参照
等しいかまたはそれより大きい値となる最小の整数を計算
引数
n : Number
数値
返値
指定された数値と等しいかまたはそれより大きい値となる最小の整数を返します。
例
print( Math.ceil(2.0) ); // 2;
print( Math.ceil(2.1) ); // 3
print( Math.ceil(-2.1) ); // -2
参照
コサインを計算
引数
n : Number
数値
返値
指定された数値のコサインを返します。
参照
e (自然対数の底) の累乗を計算
引数
n : Number
数値
返値
指定された数値を指数とする e (自然対数の底) の累乗を返します。
参照
等しいかまたはそれより小さい値となる最大の整数を計算
引数
n : Number
数値
返値
指定された数値と等しいかまたはそれより小さい値となる最大の整数を返します。
例
print( Math.floor(2.0) ); // 2;
print( Math.floor(2.1) ); // 2
print( Math.floor(-2.1) ); // -3
参照
自然対数を計算
引数
n : Number
数値
返値
指定された数値の自然対数を返します。
参照
最大数を計算
引数
n1, n2, ... : Number
数値
返値
指定された 0個 以上の数値のうち大きい方の値を返します。
引数がない場合、-Infinity を返します。
参照
最小数を計算
引数
n1, n2, ... : Number
数値
返値
指定された 0個 以上の数値のうち小さい方の値を返します。
引数がない場合、Infinity を返します。
参照
累乗計算
引数
base : Number
累乗の基数とする値
exponent : Number
累乗の指数とする値
返値
exponent を指数とする base の累乗を返します。
参照
0 ~ 1 の範囲での擬似乱数を計算
返値
生成される擬似乱数は、0 ~ 1 の範囲内の値をとります (0 は含まれ、1 は含まれません)。
つまり、戻り値が 0 になることはあっても 1 になることはありません。
乱数ジェネレータのシードは、JavaScript がロードされた時点で自動的に生成されます。
最も近い整数を計算
引数
n : Number
数値
返値
指定された数式の値に最も近い整数を返します。
解説
引数 n の小数部分が 0.5 以上の場合、この引数より大きい値となる最小の整数が戻り値として返されます。
小数部分が 0.5 未満の場合、この引数より小さいかまたは等しい値となる最大の整数が戻り値として返されます。
サインを計算
引数
n : Number
数値
返値
指定された数値のサインの値を返します。
参照
平方根を計算
引数
n : Number
数値
返値
指定された数値の平方根を返します。
負の値を指定すると、戻り値は NaN になります。
タンジェントを計算
引数
n : Number
数値
返値
指定された数値のタンジェントの値を返します。
参照
"Math" という文字列を返します。
返値
"Math" という文字列を返します。
配列を扱うクラスです。
作成方法
Arrayコンストラクター
new Array( arryLength )
new Array( element0, element1, ..., elementN )
Arrayリテラル
[element0, element1, ..., elementN]
パラメーター
arryLength |
配列の初期長さ。この値はlengthプロパティでアクセスできます。
Numberでなければ、指定された値をもつ長さ1の配列が作成されます。
最大長さは4,294,967,295まで許されます。
|
element0~N |
配列要素の値。この形式の場合、この要素を持つ配列が作成されます。
この配列のlengthプロパティは引数の数となります。
引数がない場合、長さ0の配列となります。
|
解説
配列は値集合を順序数(0,1,2,...)と結び付けたものです。
次の例はArrayリテラルで作成されたArrayオブジェクトです。3つの要素を持ち、長さは3 :
coffees = ["French Roast", "Columbian", "Kona"];
myArray = new Array( "Hello", myVar, 3.14159);
配列のindex. 配列は順序数(0,1,2,...)でindex化します。
例えば
myArray = new Array("Wind","Rain","Fire")
最初の要素はmyArray[0]で参照、2番目はmyArray[1]で参照します。
1つパラメーターを与えた場合.1つパラメーターに数を渡すとその長さの配列を作成します。
billingMethod = new Array(5);
は、長さ5の配列となります。
次は長さ25の配列で、最初3つの要素に値が代入されます。
musicTypes = new Array(25);
musicTypes[0] = "R&B";
musicTypes[1] = "Blues";
musicTypes[2] = "Jazz";
配列長さの増加. 配列の長さ以上のindex位置に代入すると長さが増加します。
colors = new Array();
alert( colors.length ); // 0
colors[99] = "midnightblue";
alert( colors.length ); // 100
変異メソッド. 以下ののメソッドは配列を書き換えます。:
pop(),
push(),
reverse(),
shift(),
sort(),
splice(),
unshift()
オブジェクトのプロトタイプを生成する関数
例
a = [1,2,3]; // a = new Array(1,2,3);
alert( a.constructor==Array ); //true
正規表現マッチの位置
解説
正規表現マッチ関数(regexp.
exec(str))が返したArrayオブジェクトに付加されたプロパティです。
その値は正規表現にマッチした文字列中の位置を示します。
input
解説
正規表現マッチ関数(regexp.
exec(str))が返したArrayオブジェクトに付加されたプロパティです。
その値は正規表現にマッチした元の文字列です。
配列の長さ
解説
配列の要素数を示します。値の範囲は0~pow(2,32)-1です。
長さは自由に変更できます。
例
var a = new Array("a","b","c","d","e"); // var a = ["a","b","c","d","e"];
a.length = 10;
alert( a[6] ); // undefined 配列の拡張要素部分には値がセットされません
alert( a[3] ); // "d" 配列を拡張しても既存の要素は変化しません
a.length = 2;
alert( a[3] ); // undefined 配列を縮小するとその長さを超えた要素は空になります
配列オブジェクトの作成
引数
arryLength : Integer
配列の長さを指定します。 0~pow(2,32)-1=4,294,967,295
element0, element1, ..., elementN : Any
配列の要素を指定します。
引数がない場合、長さ0の配列が作成されます。
引数が1つで数値である場合、①の呼び出し形式になります。
引数が1つで数値以外である場合、長さ1の配列が作成されます。
返値
配列オブジェクトを返します。
例
musicTypes = new Array(25); // 長さ25の配列
weeks = new Array("Mon","Tues", "Wed", "Thur", "Fri", "Sat", "Sun" );
配列の連結
引数
arrayName2...arrayNameN : Array
連結する配列
返値
連結された配列オブジェクトを返します。
解説
concat関数は元の配列は変更しません。
例
alpha=new Array("a","b","c")
numeric=new Array(1,2,3)
alphaNumeric=alpha.concat(numeric) // creates array ["a","b","c",1,2,3]
num1=[123]
num2=[4,5,6]
num3=-789
nums=num1.concat(num2,num3) // creates array [123,4,5,6,-789]
参照
配列のすべての要素をテスト
引数
callback : Function
各要素に対してテストする関数。
function callback(element, index, array) 形式の関数、elementは配列の要素、indexは配列のインデックス、arrayはeveryを呼び出す配列オブジェクト。
thisObject
callback を実行するときに this として使用するオブジェクト。
返値
配列の各要素について繰り返しcallback関数を呼び出し、callback関数がfalseを返せば呼び出し繰り返しを中断して、falseを返します。すべてcallback関数がtrueを返せば、trueを返します。配列が空ならtrueを返します。
例
// 配列のすべての要素の大きさをテストする
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed は false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed は true
参照
テストの条件を満たす配列要素を選び出す
引数
callback : Function
各要素に対してテストする関数。
function callback(element, index, array) 形式の関数、elementは配列の要素、indexは配列のインデックス、arrayはfilterを呼び出す配列オブジェクト。
thisObject
callback を実行するときに this として使用するオブジェクト。
返値
配列の各要素についてcallback関数を呼び出してtrueを返した要素を選び出して作成された配列を返します。
例
// 配列の大きい要素を選び出す。
function isBigEnough(element, index, array) {
return (element >= 10);
}
var array = [12, 5, 8, 130, 44];
var filtered = array.filter(isBigEnough);
// filtered は [12, 130, 44]
// array は [12, 5, 8, 130, 44]変化なし
与えられた関数を、配列の各要素に対して一度ずつ実行
callback : Function
各要素に対して処理する関数。
function callback(element, index, array) 形式の関数、elementは配列の要素、indexは配列のインデックス、arrayはforEachを呼び出す配列オブジェクト。
thisObject
callback を実行するときに this として使用するオブジェクト。
返値
なし
例
// 配列の内容を出力
function printElm(element, index, array) {
print("[" + index + "] is " + element);
}
[2, 5, 9].forEach(printElm);
// 出力:
// [0] is 2
// [1] is 5
// [2] is 9
参照
配列の中で与えられた要素を見つける
引数
searchElement
探す要素。
fromIndex
検索を始める添字。デフォルトは 0。負の数の場合、これは配列の終わりからのオフセットとみなされます。
返値
配列中で与えられた要素が見つけられた最初の添字を返します。もし存在しなければ -1 を返します。
解説
indexOf は searchElement と配列の要素を 厳密な同値 (三重イコール演算子 === で使われるのと同じ方法) を使って比較します。
===は型変換なしで比較、==は型変換してでも同じかどうかで比較判定します。
123==="123" ==> false
123=="123" ==> true
例
var array = [2, 5, 9];
var index = array.indexOf(2);
// index is 0
index = array.indexOf(7);
// index is -1
参照
配列かどうかの判定
引数
obj
チェックしたいオブジェクト。
返値
objが配列 Arrayオブジェクトであれば trueを返し、そうでなければ falseを返します。
例
// empty, fastSmall, slow, slowSmall すべて Array.isArray(*) true
var empty = [];
var fastSmall = [1];
var slow = [];
slow.slow = 0;
var slowSmall = [];
slowSmall[999999] = 0;
slowSmall.length = 0;
var all = [empty, fastSmall, slow, slowSmall];
all.forEach(function(a) { alert(Array.isArray(a)); });
// 以下はすべてfalse
Array.isArray()
Array.isArray({})
Array.isArray(null)
Array.isArray(undefined)
Array.isArray(17)
Array.isArray("Array")
Array.isArray(Math.PI)
Array.isArray(true)
Array.isArray(false)
配列の要素を連結した文字列
引数
separator : String
セパレータ文字 デフォルト値はカンマ
返値
配列要素をseparatorで連結した文字列を返します。
例
a = new Array("Wind","Rain","Fire")
myVar1=a.join() // "Wind,Rain,Fire"
myVar2=a.join(", ") // "Wind, Rain, Fire"
myVar3=a.join(" + ") // "Wind + Rain + Fire"
参照
配列の中で与えられた要素の最後の添字を見つける
引数
searchElement
探す要素。
fromIndex
検索を始める添字。デフォルトは 0。負の数の場合、これは配列の終わりからのオフセットとみなされます。
返値
配列中で与えられた要素が見つけられた最後の添字を返します。もし存在しなければ -1 を返します。
解説
indexOf は searchElement と配列の要素を 厳密な同値 (三重イコール演算子 === で使われるのと同じ方法) を使って比較します。
===は型変換なしで比較、==は型変換してでも同じかどうかで比較判定します。
123==="123" ==> false
123=="123" ==> true
例
var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);
// index is 3
index = array.lastIndexOf(7);
// index is -1
index = array.lastIndexOf(2, 3);
// index is 3
index = array.lastIndexOf(2, 2);
// index is 0
index = array.lastIndexOf(2, -2);
// index is 0
index = array.lastIndexOf(2, -1);
// index is 3
参照
配列のすべての要素を処理して新しい配列を作成
引数
callback : Function
現在の配列の要素から新しい配列の要素を生み出すための関数。
function callback(element, index, array) 形式の関数、elementは配列の要素、indexは配列のインデックス、arrayはmapを呼び出す配列オブジェクト。
thisObject
callback を実行するときに this として使用するオブジェクト。
返値
与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成して返します。
例
// 数値の配列を平方根の配列にマッピングする
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots は [1, 2, 3] となる
// numbers は [1, 4, 9] のまま
参照
配列の最後の要素の取り出しと削除
返値
配列の最後の要素を返します。
解説
配列の最後の要素を返し、最後の要素は取り除かれます。
例
myFish = ["angel", "clown", "mandarin", "surgeon"];
popped = myFish.pop();
alert( popped ); // surgeon
alert( myFish ); // angel, clown, mandarin
alert( myFish.length ); // 3
参照
要素の追加
引数
element1, ..., elementN : Any
追加したい要素
返値
追加後の配列の長さを返します。
解説
配列の最後に引数の要素を追加します。
例
myFish = ["angel", "clown"];
pushed = myFish.push("drum", "lion"); // 4
alert( myFish.length ); // 4
alert( myFish ); // angel, clown, drum, lion
参照
配列の(左から右へ)の値に対して処理を積み重ねる。
引数
callback : Function
配列のおのおのの値に実行する関数。
function(previousValue, currentValue, index, array) 形式の関数
previousValueは最初の呼び出しでははinitialValueまたは最初の配列要素(例を参照)、次からは前の呼び出しに返した値
currentValueは配列の要素、indexは配列のインデックス、arrayはreduceを呼び出す配列オブジェクト。
initialValue
callback の最初の呼び出しのときに、最初の実引数として用いるためのオブジェクト。
返値
callback関数が最後に呼び出されたときに返す値がreduce関数の返す値です。
例
//(1) 初期値(initialValue)を与えなかった場合
[0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
});
// 最初の呼び出し
previousValue = 0, currentValue = 1, index = 1
// 2 回目の呼び出し
previousValue = 1, currentValue = 2, index = 2
// 3 回目の呼び出し
previousValue = 3, currentValue = 3, index = 3
// 4 回目の呼び出
previousValue = 6, currentValue = 4, index = 4
// array は、常に、reduce が呼び出された [0,1,2,3,4] というオブジェクトです。
// 戻り値: 10
//(2) 初期値(initialValue)を与えられた場合
[0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
}, 10);
// 最初の呼び出し
previousValue = 10, currentValue = 0, index = 0
// 2 回目の呼び出し
previousValue = 10, currentValue = 1, index = 1
// 3 回目の呼び出し
previousValue = 11, currentValue = 2, index = 2
// 4 回目の呼び出し
previousValue = 13, currentValue = 3, index = 3
// 5 回目の呼び出し
previousValue = 16, currentValue = 4, index = 4
// array は、常に、reduce が呼び出された [0,1,2,3,4] というオブジェクトです。
// 戻り値: 20
参照
配列の(右から左へ)の値に対して処理を積み重ねる。
引数
callback
配列のおのおのの値に実行する関数。
function(previousValue, currentValue, index, array) 形式の関数
previousValueは最初の呼び出しでははinitialValueまたは最後の配列要素(例を参照)、次からは前の呼び出しに返した値
currentValueは配列の要素、indexは配列のインデックス、arrayはreduceRightを呼び出す配列オブジェクト。
initialValue
callback の最初の呼び出しのときに、最初の実引数として用いるためのオブジェクト。
返値
callback関数が最後に呼び出されたときに返す値がreduceRight関数の返す値です。
例
//(1) 初期値(initialValue)を与えなかった場合
[0,1,2,3,4].reduceRight(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
});
// 最初の呼び出し
previousValue = 4, currentValue = 3, index = 3
// 2 回目の呼び出し
previousValue = 7, currentValue = 2, index = 2
// 3 回目の呼び出し
previousValue = 9, currentValue = 1, index = 1
// 4 回目の呼び出
previousValue = 10, currentValue = 0, index = 0
// array は、常に、reduceRight が呼び出された [0,1,2,3,4] というオブジェクトです。
// 戻り値: 10
//(2) 初期値(initialValue)を与えられた場合
[0,1,2,3,4].reduceRight(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
}, 10);
// 最初の呼び出し
previousValue = 10, currentValue = 4, index = 4
// 2 回目の呼び出し
previousValue = 14, currentValue = 3, index = 3
// 3 回目の呼び出し
previousValue = 17, currentValue = 2, index = 2
// 4 回目の呼び出し
previousValue = 19, currentValue = 1, index = 1
// 5 回目の呼び出し
previousValue = 20, currentValue = 0, index = 0
// array は、常に、reduceRight が呼び出された [0,1,2,3,4] というオブジェクトです。
// 戻り値: 20
参照
配列要素を逆順に並べ替える
例
myArray = new Array("one", "two", "three")
myArray.reverse()
alert( myArray ); // three, two, one
参照
配列の最初の要素の取り出しと削除
返値
配列の最初の要素を返します。
解説
配列の最初の要素を返し、最初の要素は取り除かれます。
例
myFish = ["angel", "clown", "mandarin", "surgeon"];
shifted = myFish.shift();
alert( shifted ); // angel
alert( myFish ); // clown, mandarin, surgeon
参照
部分配列の取り出し
引数
begin : Integer
取り出しスタートインデックス。省略した場合、0
end : Integer
取り出し終了インデックス
省略した場合、arry.length
負の数であれば、arry.length + end
返値
取りだされた配列オブジェクトを返します。
例
myFish = ["angel", "clown", "mandarin", "surgeon"];
slice1 = myFish.slice(1,3); // ["clown", "mandarin"]
slice2 = myFish.slice(1); // ["clown", "mandarin", "surgeon"]
slice3 = myFish.slice(1,-2);// ["clown"]
配列から要素の追加と削除
引数
index : Integer
配列を変化させ始める要素のインデックス。
howMany : Integer
配列から取り除く古い要素の数を示す整数。howMany が 0 の場合、どの要素も取り除かれません。この場合、少なくとも 1 つの新しい要素を指定する必要があります。もし howMany 引数が何も指定されなかったら (上の 2 つ目の構文。非標準)、index 以降の全ての要素が取り除かれます。
返値
splice メソッドは取り除かれた要素を含む配列を返します。要素を 1 つだけ取り除いた場合、1 要素だけの配列を返します。
例
var myFish = ["angel", "clown", "mandarin", "surgeon"];
print("myFish: " + myFish); //myFish: angel,clown,mandarin,surgeon
var removed = myFish.splice(2, 0, "drum");
print("1 つ追加した後: " + myFish); //1 つ追加した後: angel,clown,drum,mandarin,surgeon
print("取り除いたのは: " + removed); //取り除いたのは:
removed = myFish.splice(3, 1);
print("1 つ取り除いた後: " + myFish); //1 つ取り除いた後: angel,clown,drum,surgeon
print("取り除いたのは: " + removed); //取り除いたのは: mandarin
removed = myFish.splice(2, 1, "trumpet");
print("1 つ置き換えた後: " + myFish); //1 つ置き換えた後: angel,clown,trumpet,surgeon
print("取り除いたのは: " + removed); //取り除いたのは: drum
removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
print("2 つ置き換えた後: " + myFish); //2 つ置き換えた後: parrot,anemone,blue,trumpet,surgeon
print("取り除いたのは: " + removed); //取り除いたのは: angel,clown
テストに合格する要素が配列の中にあるかどうかをテスト
引数
callback : Function
各要素に対してテストする関数。
function callback(element, index, array) 形式の関数、elementは配列の要素、indexは配列のインデックス、arrayはeveryを呼び出す配列オブジェクト。
thisObject
callback を実行するときに this として使用するオブジェクト。
返値
配列の各要素について繰り返しcallback関数を呼び出し、callback関数がtrueを返せば呼び出し繰り返しを中断して、trueを返します。すべてcallback関数がfalseを返せば、falseを返します。配列が空ならfalseを返します。
例
// 配列のすべての要素の大きさをテストする
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed は false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed は true
参照
配列の並べ替え
引数
compareFunction : Function
要素比較する関数を指定します。
省略した場合、要素を文字列に変換して辞書式順序で比較します。
関数の仕様は次のようになります。
function compareFunction(a, b) {
// 大小同の判定基準を自由
if (a が b より小)
return -1
if (a が b より大)
return 1
// a と b が同じ
return 0
}
解説
実行後、配列要素の順序が変わります。
例
var nums = new Array(234, 12, 43);
nums.sort(); // [12, 234, 43]
function compare( a, b )
{
return a - b;
}
nums.sort(); // [12, 43, 234]
参照
配列のソース文字列を取得
返値
配列のソース文字列を返します。
例
alpha = new Array("a", "b", "c");
alert( alpha.toSource() ); // ["a", "b", "c"]
参照
配列の文字列化
返値
配列の各要素を文字列化し,それらをcamma(,)でつないだ文字列を返します。
例
var monthNames = new Array("Jan","Feb","Mar","Apr");
myVar=monthNames.toString();
alert( myVar ); // "Jan,Feb,Mar,Apr"
参照
配列をローカルフォーマットで文字列化
返値
配列の各要素をローカライズされた文字列化し,それらをcamma(,)でつないだ文字列を返します。
配列の先頭に要素を追加
引数
element1,..., elementN : Any
追加する要素
返値
先頭に追加した後の配列の長さを返します。
解説
配列の先頭に要素が追加され、その長さが追加分増加します。
例
myFish = ["angel", "clown"];
unshifted = myFish.unshift("drum", "lion");
alert( myFish ); // drum, lion, angel, clown
alert( unshifted ); // 4
参照
配列のそのものを取得
返値
自分自身を返します。
例
n = ["a","b"];
m = n.valueOf();
m[1] = 1234;
alert( n [1] ); // 1234
ArrayBuffer, {Typed}Array クラス ...
{Typed}Array = Float32Array, Float64Array, Int16Array, Int32Array, Int8Array, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray
ArrayBuffer,{Typed}Arrayクラスはbinaryデータを柔軟かつ効果的に扱えるメカニズムを提供します。
ArrayBufferは一塊のbainaryデータを表現するクラスで、そのbainaryデータへのアクセス機能は {Typed}Arrayクラスが担当します。ここで、{Typed}は型名が当てはめられ、Float32, Float64, Int16, Int32, Int8, Uint16, Uint32, Uint8 のいずれかになります。
いくつか使用例を掲示します。
例1. サイズ4 Int16 配列
var array = new Int16Array(4); // var buffer = new ArrayBuffer(4*2); var array = Int16Array(buffer); と同じ
for (var i=0; i<4; i++) {
array[i] = 2*i;
}
print( array[3] ); // 6
例2. 同じ8バイトのメモリーを Int16配列とInt8配列でアクセス
var buffer = new ArrayBuffer(8);
var array16 = new Int16Array(buffer); // サイズ4の Int16配列
var array8 = new Int8Array (buffer); // サイズ8の Int8 配列
for (var i=0; i<array16.length; i++) {
array16[i] = 2*i;
}
for (var i=0; i<array8.length; i++) {
outstr( array8[i], " " );
}
/*出力結果
0 0 2 0 4 0 6 0
*/
例3. 構造体データ
/*
// C言語構造体
struct someStruct {
unsigned long id; // 4 bytes
char username[16]; // 16 bytes
float amountDue; // 4 bytes
};
*/
var file = new Stream("test.dat");
var buffer = file.read(24); // buffer : ArrayBuffer(24)
var idView = new Uint32Array(buffer, 0, 1); // buffer.id
var usernameView = new Uint8Array(buffer, 4, 16); // buffer.username
var amountDueView = new Float32Array(buffer, 20, 1); // buffer.amountDue
* : ArrayBufferクラスにあるプロパティと関数です。
{Typed}Arrayはこのリストにあるものをすべてサポートしてます。
Uint8ArrayとUint8ClampedArrayの違い :
共に8ビット符号なし整数(値は0-255の範囲)の配列を表現するクラスですが、範囲外の値を設定する処理が異なります。
Uint8Arrayでは8ビットを超えるビットは除き、Uint8ClampedArrayでは0-255の範囲に切り詰めて(最小値(0)または最大値(255))、値を設定します。
また少数値の設定については、Uint8Arrayでは少数点以下は切り捨てられ、Uint8ClampedArrayでは四捨五入されます。
配列要素のバイトサイズ
解説
各{typed}Arrayの要素バイトサイズは以下のようになります。
Float32Array | 4 |
Float64Array | 8 |
Int16Array | 2 |
Int32Array | 4 |
Int8Array | 1 |
Uint16Array | 2 |
Uint32Array | 4 |
Uint8Array | 1 |
Uint8ClampedArray | 1 |
例
print( Float64Array.BYTES_PER_ELEMENT ); // 8
var array = new Float32Array(4);
print( array.BYTES_PER_ELEMENT ); // 4
型配列のバッファー
解説
型配列クラス{typed}Arrayのオブジェクトは、操作アクセスするArrayBufferオブジェクトを持ちます。そのrrayBufferオブジェクトをbufferプロパティで取得できます。
例
var buffer = new ArrayBuffer(32);
var float64array = new Float64Array(buffer);
var int32array = new Int32Array(buffer,16);
print( float64array.buffer==buffer ); // true
print( int32array .buffer==buffer ); // true
バイトサイズ
解説
arraybuffer.byteLength は、ArrayBuuferオブジェクトのメモリの占有バイト数です。
typedarray .byteLength は、{Typed}Arrayオブジェクトが操作できるメモリのバイト数です。
例
var buffer = new ArrayBuffer(32);
var float64array = new Float64Array(buffer);
var int32array = new Int32Array(buffer,20);
print( float64array.byteLength ); // 32
print( int32array .byteLength ); // 12
バイト単位のオフセット位置
解説
typedarray.byteOffsetは、{Typed}Arrayオブジェクトtypedarrayがアクセスできるメモリー領域を(ArrayBuuferオブジェクトの)先頭からのオフセット位置を返します。
例
var buffer = new ArrayBuffer(32);
var float64array = new Float64Array(buffer);
var int32array = new Int32Array(buffer,20);
print( float64array.byteOffset ); // 0
print( int32array .byteOffset ); // 20
配列の長さ
解説
typedarray.lengthは、{Typed}Arrayオブジェクトtypedarrayがアクセスできる配列の長さを返します。
例
var uint16array = new Uint16Array(12);
var buffer = new ArrayBuffer(32);
var float64array = new Float64Array(buffer);
var int32array = new Int32Array(buffer,20);
var int8array = new Int8Array(buffer,10,7);
print( uint16array.length ); // 12
print( float64array.length ); // 4
print( int32array.length ); // 3
print( int8array.length ); // 7
print( int8array[6] ); // 0
print( int8array[7] ); // unsigned
ArrayBuffer, {Typed}Array コンストラクター ArrayBuffer,{Typed}Array...
{Typed}Array = Float32Array, Float64Array, Int16Array, Int32Array, Int8Array, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray
メモリバッファ, 型配列オブジェクトの作成
引数
length : Integer
バッファサイズ、配列の長さを指定します。 0~pow(2,32)-1=4,294,967,295
typedarray : {Typed}Array
型配列オブジェクト。
array : Object
Arrayオブジェクトやargumentsなどの lengthプロパティをもつオブジェクト。
buffer : ArrayBuffer
バッファオブジェクト。
byteOffset : Integer
バイトオフセット。
返値
型配列オブジェクトを返します。
解説
コンストラクタ呼び出しで作成される型配列オブジェクトは以下のようになります。
new ArrayBuffer( length ) |
バッファサイズlengthのメモリバッファを作成 |
new {Typed}Array( length ) |
長さlengthの型配列を作成 |
new {Typed}Array( typedarray ) |
型配列typedarrayの各要素を{Typed}型へ変換した同じ長さの型配列を作成 |
new {Typed}Array( array ) |
array[i] (i=0~array.length-1)を{Typed}型へ変換した同じ長さの型配列を作成 |
new {Typed}Array( buffer ) |
メモリ内容bufferをもつ、長さbuffer.byteLength/{Typed}Array.BYTES_PER_ELEMENT の型配列を作成
buffer.byteLength/{Typed}Array.BYTES_PER_ELEMENTは >=0, 整数でなければいけない。
|
new {Typed}Array( buffer, byteOffset ) |
オフセットbyteOffsetからのメモリ内容bufferをもつ、長さ(buffer.byteLength-buffer.byteOffset)/{Typed}Array.BYTES_PER_ELEMENT の型配列を作成
(buffer.byteLength-buffer.byteOffset)/{Typed}Array.BYTES_PER_ELEMENTは >=0, 整数でなければいけない。
|
new {Typed}Array( buffer, byteOffset, length ) |
オフセットbyteOffsetからのメモリ内容bufferをもつ、長さlength の型配列を作成
0<=length , length<=(buffer.byteLength-buffer.byteOffset)/{Typed}Array.BYTES_PER_ELEMENT でなければいけない。
|
例
//----
var a = new Int16Array(8);
print( a.length ); // 8
//----
var buffer = new ArrayBuffer(24);
var a = new Int16Array(buffer); // must be buffer.byteLength%2==0
print( a.length ); // 12
//----
var o = [10,11,12];
var a = new Int16Array(o);
print(a.length); // 3
print(a[2]); // 12
print(a[1]); // 11
print(a[100]); // undefined
//----
var o = {length:8, 0:10, 2:12};
var a = new Int16Array(o);
print(a.length); // 8
print(a[2]); // 12
print(a[1]); // 0
print(a[7]); // 0
print(a[100]); // undefined
var b = new Int16Array(a); // a:TypedArray
print(b.length); // 8
print(b[2]); // 12
print(b[1]); // 0
print(b[7]); // 0
print(b[100]); // undefined
//----
var buffer = new ArrayBuffer(24);
var a = new Int16Array(buffer,12);
var b = new Int16Array(buffer,12,2);
a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4;
print(b[0]); // 1
print(b[1]); // 2
print(b[2]); // undefined
代入関数
引数
array : Object
lengthプロパティをもつオブジェクト
offset : Integer
代入先typedarrayの最初のインデックス。省略した場合 0
解説
typedarray.set(array, offset); は次のプログラム実行と同じです。
for (var i=0; i<array.length; i++) typedarray[offset+i] = array[i];
offset + array.length > typedarray.length となる場合、Errorが発生します。
例
var o = {length:8, 0:10, 2:12};
var a = new Int16Array(24);
a.set(o,16);
print(a[15]); // 0
print(a[16]); // 10
print(a[17]); // 0
print(a[18]); // 12
print(a[19]); // 0
a.set(o,17); // Error: invalid arguments
部分配列を取り出す
引数
begin : Integer
取り出しのスタートインデックス
end : Integer
取り出しのラストインデックスの次。省略した場合、配列の最後まで
返値
部分配列のオブジェクトを返します。
例
var a = new Int16Array(24);
for (var i=0; i<24; i++) {
a[i] = 10+i;
}
var b = a.subarray(20,24);
print(b.length); // 4
print(b[0]); // 30
print(b[1]); // 31
print(b[2]); // 32
print(b[3]); // 33
print(b[4]); // undefined
b[0] = -30;
print(a[20]); // -30
Boolean値のラッパークラスです。使われることはほとんどありません。
オブジェクトのプロトタイプを生成する関数
例
a = true; // a = new Boolean("");
alert( a.constructor==Boolean ); //true
Booleanオブジェクトの作成
引数
value : Any
Booleanオブジェクトを初期化するための値。
省略または 0, -0, null, false, NaN, undefined, あるいは 空文字列"" が渡された場合、falseで初期化されたBooleanオブジェクトが作成されます。
その他の値が渡された場合、trueで初期化されたBooleanオブジェクトが作成されます。
返値
Booleanオブジェクトを返します。
解説
Boolean値からこのBooleanクラスの関数を呼び出すとき、
このコンストラクターで自動的にBooleanオブジェクトに変換してから呼び出します。
true.toSource() // == new Boolean(true) . toSource()
Booleanオブジェクトのソース文字列を取得
返値
Booleanオブジェクトのソース文字列を返します。
例
trueobj = new Boolean(true);
alert( trueobj.toSource() ); // (new Boolean(true))
falseobj = new Boolean("");
alert( falseobj.toSource() ); // (new Boolean(false))
参照
Booleanオブジェクトの文字列化
返値
trueから作成されたBooleanオブジェクトなら"true"を返し、
falseから作成されたものなら"false"を返します。
例
trueobj = new Boolean(true);
alert( trueobj.toString() ); // true
falseobj = new Boolean("");
alert( falseobj.toString() ); // false
参照
Booleanオブジェクトの基本データ値を取得
返値
Booleanオブジェクト作成の値を返します。
例
trueobj = new Boolean(true);
alert( trueobj.valueOf() ); // true
falseobj = new Boolean("");
alert( falseobj.valueOf() ); // false
参照
日付と時間を扱うクラスです。
オブジェクトのプロトタイプを生成する関数
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.constructor==Date ); // true
Dateオブジェクトの作成
引数
milliseconds : Integer
1970年 1月 1日 00:00:00(UTC) からのミリ秒
dateString : String
日付を表す文字列
yr_num, mo_num, day_num : Integer
年、月、日
月は0~11で指定してください。0は1月 11は12月となってます。
hr_num, min_num, sec_num, ms_num : Integer
時、分、秒、ミリ秒。 省略した場合 0と渡したことになります。
返値
作成されたDateオブジェクトを返します。
引数を省略した場合、現在の日付と時間でDateオブジェクトを作成します。
解説
Dateは1970年 1月 1日 00:00:00(UTC) からのミリ秒で測られます。
Dateの範囲は、1970年 1月 1日 00:00:00(UTC) から100,000,000日から-100,000,000日までです。
年は西暦で与え、98年と省略するのでなく1998年として与えて下さい。
例
//2004年5月16日0時0分0秒
dt = new Date(2004, 4, 16);
//2004年5月16日12時45分30秒
dt = new Date(2004, 1, 16, 12, 45, 30);
dt = new Date("Feb 16, 2004 12:45:30");
dt = new Date("February 16, 2004 12:45:30");
dt = new Date( "2/16/2004 12:45:30");
//現在の日付と時刻
dd = new Date();
日を取得
返値
Dateオブジェクトの日を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getDate() ); // 16
参照
曜日を取得
返値
Dateオブジェクトの曜日を返します。日曜日(0)~土曜日(6)
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getDay() ); // 1=月曜日
参照
西暦年数を取得
返値
Dateオブジェクトの西暦年数を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getFullYear() ); // 2004
参照
時間を取得
返値
Dateオブジェクトの時間を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getHours() ); // 12
参照
ミリ秒を取得
返値
Dateオブジェクトのミリ秒を返します。
例
dt = new Date(2004, 1, 16, 12, 45, 30, 123);
alert( dt.getMilliseconds() ); // 123
参照
分を取得
返値
Dateオブジェクトの分を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getMinutes() ); // 45
参照
月を取得
返値
Dateオブジェクトの月-1を返します。0は1月、11は12月。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getMonth() ); // 1=2月
参照
秒を取得
返値
Dateオブジェクトの秒を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getSeconds() ); // 30
参照
1970年 1月 1日 00:00:00 からのミリ秒を取得
返値
Dateオブジェクトの値を1970年 1月 1日 00:00:00 からのミリ秒で返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getTime() ); // 1,076,903,130,000
参照
時間単位情報(分単位)を取得
返値
日本の場合には-540(-9時間)を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getTimezoneOffset() ); // -540
世界標準時(UTC)での日を取得
返値
Dateオブジェクトの世界標準時(UTC)でのを返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCDate() ); // 16
参照
世界標準時(UTC)での曜日を取得
返値
Dateオブジェクトの世界標準時(UTC)での曜日を返します。日曜日(0)~土曜日(6)
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCDay() ); // 1=月曜日
参照
世界標準時(UTC)での西暦年数を取得
返値
Dateオブジェクトの世界標準時(UTC)での西暦年数を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCFullYear() ); // 2004
参照
世界標準時(UTC)での時間を取得
返値
Dateオブジェクトの世界標準時(UTC)での時間を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCHours() ); // 3
参照
世界標準時(UTC)でのミリ秒を取得
返値
Dateオブジェクトの世界標準時(UTC)でのミリ秒を返します。
例
dt = new Date(2004, 1, 16, 12, 45, 30, 123);
alert( dt.getUTCMilliseconds() ); // 123
参照
世界標準時(UTC)での分を取得
返値
Dateオブジェクトの世界標準時(UTC)での分を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCMinutes() ); // 45
参照
世界標準時(UTC)での月を取得
返値
Dateオブジェクトの世界標準時(UTC)での月-1を返します。0は1月、11は12月。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCMonth() ); // 1=2月
参照
世界標準時(UTC)での秒を取得
返値
Dateオブジェクトの世界標準時(UTC)での秒を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getUTCSeconds() ); // 30
参照
1900年からの差分年数を取得
返値
Dateオブジェクトの1900年からの差分年数を返します。
解説
JavaScript1.2以降では、このメソッドではなく
getFullYear()メソッドを使うことが推奨されています。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.getYear() ); // 104
参照
現在日時に対応する数値を取得
返値
現在日時に対応する数値を返します。
日時文字列を解析して1970年 1月 1日 00:00:00(local)からのミリ秒を取得
引数
dateString : String
日時文字列
返値
日時文字列を解析して1970年 1月 1日 00:00:00(local)からのミリ秒を返します。
例
time = Date.parse( "2/16/2004 12:45:30")
alert( time ); // 1076903130000
参照
日付けをセット
引数
dayValue : Integer
1~31日
例
dt = new Date( "2/16/2004 12:45:30");
dt.setDate(24);
alert( dt.getDate() ); // 24
参照
西暦年数を変更
引数
yearValue : Integer
西暦年数
monthValue : Integer
月 0~11 0は1月、11は12月
dayValue : Integer
日 1~31
例
dt = new Date( "2/16/2004 12:45:30");
dt.setFullYear(2005);
alert( dt.getFullYear() ); // 2005
参照
時間を変更
引数
hoursValue : Integer
時間 0~23
minutesValue : Integer
分 0~59
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setHours(7);
alert( dt.getHours() ); // 7
参照
ミリ秒を変更
引数
millisecondsValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setMilliseconds(100);
alert( dt.getMilliseconds() ); // 100
参照
分を変更
引数
minutesValue : Integer
分 0~59
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setMinutes(15);
alert( dt.getMinutes() ); // 15
参照
月を変更
引数
monthValue : Integer
月 0~11 0は1月、11は12月
dayValue : Integer
日 1~31
例
dt = new Date( "2/16/2004 12:45:30");
dt.setMonth(6);
alert( dt.getMonth() ); // 6=7月
参照
秒を変更
引数
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setSeconds(15);
alert( dt.getSeconds() ); // 15
参照
1970年 1月 1日 00:00:00 からのミリ秒を変更
引数
timevalue : Integer
1970年 1月 1日 00:00:00 からのミリ秒
参照
世界標準時(UTC)での日付けを変更
引数
dayValue : Integer
1~31日
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCDate(24);
alert( dt.getUTCDate() ); // 24
参照
世界標準時(UTC)での西暦年数を変更
引数
yearValue : Integer
西暦年数
monthValue : Integer
月 0~11 0は1月、11は12月
dayValue : Integer
日 1~31
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCFullYear(2005);
alert( dt.getUTCFullYear() ); // 2005
参照
世界標準時(UTC)での時間を変更
引数
hoursValue : Integer
時間 0~23
minutesValue : Integer
分 0~59
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCHours(7);
alert( dt.getUTCHours() ); // 7
参照
世界標準時(UTC)でのミリ秒を変更
引数
millisecondsValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCMilliseconds(100);
alert( dt.getUTCMilliseconds() ); // 100
参照
世界標準時(UTC)での分を変更
引数
minutesValue : Integer
分 0~59
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCMinutes(15);
alert( dt.getUTCMinutes() ); // 15
参照
世界標準時(UTC)での月を変更
引数
monthValue : Integer
月 0~11 0は1月、11は12月
dayValue : Integer
日 1~31
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCMonth(6);
alert( dt.getUTCMonth() ); // 6=7月
参照
世界標準時(UTC)での秒を変更
引数
secondsValue : Integer
秒 0~59
msValue : Integer
ミリ秒 0~999
例
dt = new Date( "2/16/2004 12:45:30");
dt.setUTCSeconds(15);
alert( dt.getUTCSeconds() ); // 15
参照
1900年からの差分年数を変更
引数
yearValue : Integer
1900年からの差分年数
解説
例
dt = new Date( "2/16/2004 12:45:30");
dt.setYear(105); // ? dt.setYear(2005);
alert( dt.getYear() ); // 105
参照
日時の「日付」部を文字列へ変換
返値
date日時の「日付」部だけを文字列に変換して返します。
例
var dt = new Date("2/16/2004 12:45:30");
alert(dt); // Mon Feb 16 2004 12:45:30 GMT+0900
alert(dt.toDateString()); // Mon Feb 16 2004
DateオブジェクトをJSON形式文字列へ変換
返値
dateをJSON形式文字列へ変換して返します。
例
var curDate = new Date();
var jsonDate = curDate.toJSON();
print("JSON string: " + jsonDate); // "JSON string: 2011-04-03T11:45:57.182Z"
var backToDate = new Date(jsonDate);
GMTフォーマットで文字列化
返値
日付け・時刻をGMTフォーマットで文字列化したものを返します。
解説
参照
日時の「日付」部をローカライズした文字列へ変換
返値
date日時の「日付」部だけをローカライズ文字列に変換して返します。
参照
日時を指定書式の文字列に変換
引数
format : String
書式文字列。
返値
書式文字列にしたがって日時の変換した文字列を返します。
解説
書式
%a | 曜日の省略名 |
%A | 曜日の正式名 |
%b | 月の省略名 |
%B | 月の正式名 |
%c | ロケールに応じた日付と時間の表現 |
%d | 10進数で表す月の日付(01-31) |
%D | %m/%d/%yと同じ |
%e | 月単位の日付を10進数で表したもの。 日付が1桁の場合は、前に 空白を一つ付けます。(' 1'~'31') |
%h | %bと同じ |
%H | 24時間表記の時間(00-23) |
%I | 12時間表記の時間(00-12) |
%j | 10進数で表す年頭からの日数(001-366) |
%m | 10進数で表す月(01-12) |
%M | 10進数で表す分(00-59) |
%p | 現在のロケールのAM/PM |
%S | 10進数で表す秒 |
%U | 10進数で表す週の通し番号。日曜日を週の最初の日(00-53) |
%w | 10進数で表す曜日。日曜日を0(0-6) |
%W | 10進数で表す週の通し番号。月曜日を週の最初の日(00-53) |
%x | 現在のロケールの日付表示 |
%X | 現在のロケールの時刻表示 |
%y | 10進数で表す西暦の下2桁(00-99) |
%Y | 10進数で表す4桁の西暦 |
%z | 時間帯の名前または省略名(JSTなど) 時間帯がわからない場合には文字を入れない。 |
%% | パーセント記号 |
参照
ローカルフォーマットで文字列化
返値
日付け・時刻をローカルフォーマットで文字列化したものを返します。
解説
日付け・時刻のローカルフォーマットはOSやその設定で決まります。
参照
日時の「時刻」部をローカライズした文字列へ変換
返値
日時の「時刻」部をローカライズした文字列を返します。
参照
Dateオブジェクトのソースコード
返値
Dateオブジェクトを作成するソースコードを返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.toSource() ); // (new Date(1076903130000))
参照
Dateオブジェクトを文字列化
返値
Dateオブジェクトを文字列化したものを返します。
解説
JavaScriptはDateオブジェクトを文字列化しなければならないときや文字列として連結するとき、
このtoString()関数を呼び出します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.toString() ); // Mon Feb 16 2004 12:45:30 GMT+0900
参照
日時の「時刻」部を文字列へ変換
返値
date日時の「時刻」部だけを文字列に変換して返します。
UTC(世界標準時刻)フォーマットで文字列化
返値
UTC(世界標準時刻)フォーマットで文字列化したものを返します。
dt = new Date( "2/16/2004 12:45:30");
alert( dt.toUTCString() ); // Mon, 16 Feb 2004 03:45:30 GMT
参照
1970年 1月 1日 00:00:00(UTC) からのミリ秒を取得
引数
引数はUTC(世界標準時刻)で与えて下さい。
year : Integer
1900年後の年
month : Integer
月 0~11 0は1月、11は12月
day : Integer
日 1~31
hrs : Integer
時間 0~23
min : Integer
分 0~59
dec : Integer
秒 0~59
ms : Integer
ミリ秒 0~999
返値
1970年 1月 1日 00:00:00(UTC) からのミリ秒を返します。
参照
Dataオブジェクトの基本データ値を取得
返値
1970年 1月 1日 00:00:00(UTC) からのミリ秒を返します。
例
dt = new Date( "2/16/2004 12:45:30");
alert( dt.valueOf() ); // 1076903130000
参照
Error, {Some}Error クラス ...
{Some}Error = EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
実行時エラー状況を知らせるクラスです。
Errorクラス以外の EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIErrorクラスは、Errorクラスを継承しており エラー種類に対応したクラスです。
EvalError eval 関数に関するエラーを表します。
RangeError 数値が正しい許容範囲にない場合のエラーを表します。
ReferenceError 存在しない変数が参照された場合のエラーを表します。
SyntaxError 構文的に不正なコードを解釈しようとした場合のエラーを表します。
TypeError 値が期待される型でない場合のエラーを表します。
URIError 奇妙な形のURIに遭遇した場合のエラーを表します。
JavaScript実行エンジンはエラーが発生するとErrorオブジェクトを生成し throwします。
エラーが発生するコードを try ブロックで囲むと、そのエラーを catch ブロックでキャッチできます。キャッチされたデータはErrorオブジェクトであり、エラー種類とメッセージ、行番号、ファイル名などを知ることことができます。
var x = null;
try {
print(x.x);
} catch(e) {
print(e); // TypeError: x is null
}
また、Errorオブジェクトを意図的に作成し throwできます。
var x = 0;
var y;
try {
if(x == 0) {
throw new Error("division by zero");
}
y = 1 / x;
print(y);
} catch(e) {
print(e); // Error: division by zero
}
try ブロックで囲んでいない場合、エラーメッセージを表示してスクリプトを終了します。
var x = null;
print(x.x); // 「D:\Work\t.js:14: TypeError: x is null」を表示
// この後の命令は実行されない。
x = 10;
print(x);
オブジェクトのプロトタイプを生成する関数
例
error = new Error('test error');
alert( error.constructor==Error ); //true
エラーのメッセージ
例
var x = null;
try {
print(x.x);
} catch(e) {
print(e.message); // x is null
}
エラーを起こしたファイルへのパス名
例
var x = null;
try {
print(x.x);
} catch(e) {
print(e.fileName); // D:\Work\t.js
}
エラーを起こしたファイル内の行番号
例
var x = null;
try {
print(x.x);
} catch(e) {
print(e.lineNumber); // 5
}
スタックトレース(エラー時の関数呼び出し履歴)
解説
1スタックの文字列フォーマットは
関数名 @ 関数が定義されたファイル名 : 行番号
となってます。関数外のスタックでは関数名は空になります。
関数が複数呼び出されていれば、スタックの深い位置から、順次 改行文字で区切って文字列表現されます。
例
function f1() {
f2();
}
function f2() {
var x = null;
print(x.x);
}
try {
f1();
} catch(e) {
print(e.stack);
}
/*
f2@D:\Work\t.js:72
f1@D:\Work\t.js:68
@D:\Work\t.js:76
*/
Error, {Some}Error コンストラクター Error...
{Some}Error = EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
エラーオブジェクト作成
引数
message : String
人間に読めるエラーの説明
fileName : String (非標準)
例外を発生させるコードを含むファイルの名前
lineNumber : Integer (非標準)
例外を発生させるコードの行番号
返値
エラーオブジェクトを返します。
例
function fun() {
throw new Error("error-test!");
}
try{
fun();
}catch(e){
print("e instanceof Error => " + (e instanceof Error));
print("message => " + e.message);
print("name => " + e.name);
print("lineNumber => " + e.lineNumber);
print("fileName => " + e.fileName);
print();
print("stack => " + e.stack);
print("to_string => " + e.toString());
print("to_source => " + e.toSource());
}
/*
e instanceof Error => true
message => error-test!
name => Error
lineNumber => 2
fileName => D:\Work\t.js
stack => fun()@D:\Work\t.js:2
@D:\Work\t.js:6
to_string => Error: error-test!
to_source => (new Error("error-test!", "D:\\Work\\t.js", 2))
*/
エラーオブジェクトのソースを含む文字列を返す関数
返値
エラーオブジェクトのソース文字列を返します。
参照
エラーオブジェクトを表す文字列を返す関数
返値
エラーオブジェクトの文字列を返します。
参照
例
var error = new Error("error-test!");
alert( error.toString() ); // Error: error-test!
alert( error.toSource() ); // (new Error("error-test!", "D:\\Work\\t.js", 33))
関数オブジェクトを扱うクラスです。
作成方法
Functionコンストラクター
new Function ([arg1, arg2, ... argN,] functionBody)
function文(関数定義)
function name([param1, param2, ... paramN]) {
statements
}
パラメーター
arg1, arg2, ... argN |
関数の仮引数名。JavaScript変数に適合する文字列を与えます。例えば、"x" とか "theValue"
|
functionBody |
関数定義に含まれるJavaScript文からなる文字列です。
|
name |
関数名
|
param1, param2, ... paramN |
関数に渡される引数の名前(仮引数)です。
|
statements |
関数本体のJavaScript文です。
|
関数オブジェクトの呼び出し方
Functionコンストラクターの場合
var sum = new Function("a","b","return a + b");
alert( sum(20,30) ); // 50
function文(関数定義)の場合
function sum(a,b) {
return a + b;
}
alert( sum(200,300) ); // 500
関数に渡した引数に一致する配列
解説
関数に渡した引数に一致する配列。これは、Function オブジェクトのプロパティとしては、非推奨です。代わりに関数内に用意されている
arguments オブジェクトを使用してください。
例
function A(a,b,c)
{
alert(A.arguments.length); // alert(arguments.length);
}
A(10); // 1
現在実行している関数を呼び出した関数
例
function A(a,b,c)
{
alert(A.caller.toSource() );
}
function B()
{
A();
}
B();
/*
function B()
{
A();
}
*/
オブジェクトのプロトタイプを生成する関数
例
function A() {}
alert( A.constructor==Function ); //true
関数によって期待される引数の数
解説
new Function(...), function name(...)での仮引数の数を返します。
例
function A(a,b,c)
{
alert(A.arguments.length); // alert(arguments.length);
}
A.length; // 3
関数の名前
例
function A()
{
}
alert( A.name ); // "A"
関数オブジェクトの作成
引数
arg1, arg2, ... argN : String
関数の仮引数名
functionBody : String
関数本体のJavaScript文
返値
作成された関数オブジェクトを返します。
例
var multiply = new Function("x", "y", "return x * y");
alert( multiply(4,5) ); //20
関数の別呼び出し(引数を配列化)
引数
thisArg : Object
呼び出しオブジェクト
argArray : Array
argArray[0],argArray[1],...が関数オブジェクトへ渡されます。
解説
オブジェクトを指定しない呼び出し(call)の場合
function sum(a,b) { return a + b; }
alert( sum(20,30) ); // 50
alert( sum.apply(null,[20,30]) ); // 50
sum(20,30)とsum.apply(null,[20,30])は同じ呼び出しです。
オブジェクトを指定した呼び出し(call)の場合
function Point(x,y) { this.x = x; this.y = y; } // Pointクラスのコンストラクター
function absm(k) { return k * Math.sqrt(this.x*this.x + this.y*this.y); }
Point.prototype.absm = absm;
var pt = new Point(5,12);
alert( pt.absm(2) ); // 26
alert( absm.apply(pt,[2]) ); // 13
pt.absm()とabsm.apply(pt,[2])は同じ呼び出しです。
参照
呼出オブジェクトと引数を結合した関数を作成
作成された関数を bound functionと呼ぶことにします。
引数
thisArg : Object
呼出オブジェクト。
nullをセットした場合、thisArg=globalオブジェクトと同じです。
arg1, arg2, ...
結合する引数
返値
funcとthisArg[, arg1[, arg2[, ...]]]を結合して新しく作成された関数を返します。
作成された bound functionの実行は、次のように func関数を呼び出します。
func1 = func.bind(null,p1,p2);
func1(a1,a2); // func(p1,p2,a1,a2); と同じ
func2 = func.bind(obj,p1,p2);
func2(a1,a2); // obj.func(p1,p2,a1,a2); と同じ
参照
例1. thisを操作する bound関数
var x = 9,
module = {
getX: function() {
return this.x;
},
x: 81
};
// module.getX() は, module==this となり, module.xが返ってきます。
print( module.getX() ); // 81
// 次の例では、thisにglobalオブジェクトがセットされています。
var getX = module.getX;
// getX() は, module==global となり, xが返ってきます。
print( getX() ); // 9
// 以下では、moduleを thisとして結合されています。
var boundGetX = getX.bind(module);
// boundGetX()は, this==module となり module.xが返ってきます。
print( boundGetX() ); // 81
例2. 引数を取り込んだ bound関数
function List() {
var a = [];
for (var i = 0; i < arguments.length; i++) {
a.push(arguments[i]);
}
return a;
}
// リスト作成
var listOne = List(1, 2, 3);
print(listOne); // [1, 2, 3]
// 1つの引数を取り込んだ関数を作成
var leadingZeroList = List.bind(null /* this */, 0);
print( leadingZeroList() ); // [0]
print( leadingZeroList(1) ); // [0, 1]
print( leadingZeroList(1, 2) ); // [0, 1, 2]
例3. bound関数でコンストラクタ
function Point(x, y) {
this.x = x;
this.y = y;
}
// Pointコンストラクタのprototypeに toStringメソッドを追加
Point.prototype.toString = function() {
return this.x + "," + this.y;
};
// Pointコンストラクタでオブジェクトを作成
var p = new Point(1, 2);
print( p.toString() ); // 1,2
var emptyObj = {},
YAxisPoint = Point.bind(emptyObj, 0 /* x */);
// YAxisPointコンストラクタでオブジェクトを作成
var axisPoint = new YAxisPoint(5);
print( axisPoint.toString() ); // 0,5
print( axisPoint instanceof Point ); // true
print( new YAxisPoint(17) instanceof Point ); // true
print( new YAxisPoint(17) instanceof YAxisPoint ); // true
print( new Point(17, 42) instanceof YAxisPoint ); // true // 下記解説の完全でない実装では falseとなります。
// YAxisPointコンストラクタは普通の関数として呼び出せます。
YAxisPoint(13);
print( emptyObj.x + "," + emptyObj.y ); // 0,13
解説
仮にJavaScriptに Function.prototype.bind 関数がない場合、完全でないけど次のように実装できます。
if ( !Function.prototype.bind ) {
Function.prototype.bind = function( obj ) {
var slice = [].slice,
args = slice.call(arguments, 1),
self = this,
nop = function () {},
bound = function () {
return self.apply( this instanceof nop ? this : ( obj || {} ),
args.concat( slice.call(arguments) ) );
};
nop.prototype = self.prototype;
bound.prototype = new nop();
return bound;
};
}
この実装は、bindクラス関数の仕様といくらか違う動作をします。たとえば、上記の例3. 演算子instanceof が正しく動作していません。
関数の別呼び出し(引数を並べる)
引数
thisArg : Object
呼び出しオブジェクト
arg1, arg2, ...
arg1, arg2, ...がそのまま関数オブジェクトへ渡されます。
解説
オブジェクトを指定しない呼び出し(call)の場合
function sum(a,b) { return a + b; }
alert( sum(20,30) ); // 50
alert( sum.call(null,20,30) ); // 50
sum(20,30)とsum.call(null,20,30)は同じ呼び出しです。
オブジェクトを指定した呼び出し(call)の場合
function Point(x,y) { this.x = x; this.y = y; } // Pointクラスのコンストラクター
function absm(k) { return k * Math.sqrt(this.x*this.x + this.y*this.y); }
Point.prototype.absm = absm;
var pt = new Point(5,12);
alert( pt.absm(2) ); // 26
alert( absm.apply(pt,[2]) ); // 13
pt.absm(2)とabsm.call(pt,2)は同じ呼び出しです。
参照
関数のソースコード
返値
関数のソースコードを文字列化して返します。
参照
関数のソースコード
返値
関数のソースコードを文字列化して返します。
参照
自分自身関数オブジェクトを返す
返値
funcを返します。
参照
数値のラッパークラスです。
オブジェクトのプロトタイプを生成する関数
例
a = 12.3; // a = new Number(12.3);
alert( a.constructor==Number ); //true
最大数値
解説
JavaScriptが扱える最大数値を返します。約 1.79e+308
MAX_VALUEを超える数値はInfinityとされます。
参照
最も0に近い正の数値
解説
JavaScriptが扱える最も0に近い正の数値を返します。約 5e-324
MIN_VALUEより小さい数値は0とされます。
参照
数値でないことを表す特別な値
解説
JavaScriptではNaNとリテラル表現されます。
NaN は、それ自身を含む、いかなる値と比較しても等しくなりません。isNaN 関数を使って調べれます。
数値を返す関数で、エラーが発生したときこの値を返すことで使用します。
参照
負の無限大
解説
-Infinityとリテラル表現されます。
JavaScript で表現できる最も小さい負の値 (-Number.MAX_VALUE) よりも小さい値はNumber.NEGATIVE_INFINITYとして扱います。
参照
正の無限大
解説
Infinityとリテラル表現されます。
JavaScript で表現できる最も大きい値 (Number.MAX_VALUE) よりも大きい値はNumber.POSITIVE_INFINITYとして扱います。
参照
数値オブジェクトの作成
引数
value : Number
数値
返値
作成された数値オブジェクトを返します。
解説
数値からこのNumberクラスの関数を呼び出すとき、
このコンストラクターで自動的にNumberオブジェクトに変換してから呼び出します。
例
var a = 1234;
alert( a.toString(16) ); // 4d2
指数表記で数値の文字列化
引数
fractionDigits : String
小数点以下の桁数 省略した場合、数値の表現に必要な桁数がセットされます。
返値
指数表記の数値を表す文字列を返します。
例
var num=77.1234
alert(num.toExponential()) // 7.71234e+1
alert(num.toExponential(4)) // 7.7123e+1
alert(num.toExponential(2)) //displays 7.71e+1
alert(77.1234.toExponential()) // 7.71234e+1
alert(77 .toExponential()) // 7.7e+1 注意: .の前にスペースをあり!
参照
固定小数点表記で数値の文字列化
引数
fractionDigits : Integer
小数点以下の桁数 省略した場合、0桁
返値
固定小数点表記の数値を表す文字列を返します。
例
var num=10.1234
alert(num.toFixed()) // 10
alert(num.toFixed(4)) // 10.1234
alert(num.toFixed(2)) // 10.12
参照
数をローカライズした文字列へ変換
返値
数のローカライズした文字列を返します。
有効桁数で数値の文字列化
引数
precision : Integer
有効桁数を指定します。1~21 省略した場合、toString()を実行します。
返値
指数表記の数値では、(precision - 1) 桁を小数点以下の数値として返します。
固定小数点の数値では、precision 有効桁数分を返します。
例
var num=5.123456
alert(num.toPrecision()) // 5.123456
alert(num.toPrecision(4)) // 5.123
alert(num.toPrecision(2)) // 5.1
alert(num.toPrecision(1)) // 5
alert(1250 .toPrecision(2)) // 1.3e+3
alert(1250 .toPrecision(5)) // 1250.0
参照
Numberオブジェクトのソース文字列を取得
返値
Numberオブジェクトのソース文字列を返します。
参照
Numberオブジェクトの文字列化
引数
radix : Integer
進数を指定します。2~36 省略した場合、10
返値
数値の文字列を返します。
解説
JavaScriptは数値を文字列として表現しなければならないときや文字との連結のとき、
toString()が自動的に呼び出されます。
var howMany=10;
alert(howMany.toString()); // 10
alert(45 .toString()); // 45
参照
Numberオブジェクトの基本データ値を取得
返値
格納されている数値を返します。
例
var x = new Number();
print(x.valueOf()); // 0
参照
Objectはプロパティ(値と名前)から構成されるデータ集合型です。
JavaScriptの他のオブジェクトはすべて Objectを継承しているので、関数のoverrideがなければ Objectの関数(メソッド)が呼び出せます。
オブジェクトのプロパティ継承チェーン
解説
JavaScriptでは、オブジェクトに指定されたプロパティが存在しないと、object.__proto__にセットされたオブジェクトからプロパティを探す仕組みになっています。
var b = { x:10, y:20 };
var a = { z:30 };
alert( "a.x = " +a.x + " a.y = "+a.y ); // a.x = undefined a.y = undefined
a.__proto__ = b;
alert( "a.x = " +a.x + " a.y = "+a.y ); // a.x = 10 a.y = 20
new演算子で作成されたオブジェクトの__proto__プロパティには、コンストラクタ(すなわち関数)のprototypeプロパティ値がセットされています。次の例のようにJavaScriptでオブジェクト指向が可能になります。
参照
例
function Point(x,y) {
this.x = x;
this.y = y;
}
Point.prototype = {
move : function(dx,dy) {
this.x += dx;
this.y += dy;
},
abs : function() {
return Math.sqrt(this.x*this.x + this.y*this.y);
}
};
var pnt = new Point(10,20);
alert( "pnt.x = "+pnt.x + " pnt.y = "+pnt.y ); //pnt.x = 10 pnt.y = 20
alert( "pnt.abs() --> " + pnt.abs() ); //pnt.abs() --> 22.360679774997898
alert( pnt.__proto__==Point.prototype ); //true
オブジェクトのプロトタイプを生成する関数
例
o = new Object; // o = {}
alert( o.constructor == Object ); //true
a = new Array; // a = []
alert( a.constructor == Array ); // true
n = new Number(3);
alert( n.constructor == Number); // true
Objectオブジェクトの作成
返値
作成されたObjectオブジェクトを返します。
解説
Objectオブジェクトの作成は、次のようにもできます。
var obj = {}; // var obj = new Object();
プロパティ付きのObjectオブジェクト作成は、次のように書きます。
var obj = { a:100, b:200 };
これは、以下と同じです。
var obj = new Object();
obj.a = 100; obj.b = 200;
指定したプロトタイプとプロパティでObjectオブジェクト作成
引数
proto : Object
新しく作られるオブジェクトのプロトタイプ
propertiesObject : Object
返値
作成されたオブジェクトを返します。
参照
例
var o;
// point オブジェクトをプロトタイプとするオブジェクト作成
var point = { x:10, y:20};
o = Object.create(point);
print(o.x); // 10
o.y = 200;
print(o.y); // 200
print(point.y); // 20
// o = {} と同じ
o = Object.create(Object.prototype);
// プロトタイプ :新しい空オブジェクト
// プロパティは1つ p : 書き換え, 列挙, 構成変更 すべて不可
// which isn't writable, enumerable, or configurable
o = Object.create({}, { p: { value: 42 } });
プロパティ定義, 変更
引数
obj : Object
C
prop : String
プロパティ名
descriptor : Object
プロパティ記述子
返値
プロパティ定義・変更した引数の obj を返します。
参照
解説
プロパティは名前と値のペアがであるが、さらに書込許可・列挙・変更属性を持っています。
属性指定を含んだプロパティの定義また変更を行うには、
defineProperty関数を使用します。
// 普通のプロパティ定義
var o = {};
o.p = 42;
は、次のようにします。
// defineProperty関数を使ったプロパティ定義
var o = {};
Object.defineProperty(o, "p",
{
value : 42,
writable : true,
enumerable : true,
configurable : true
}
);
プロパティは上記のような昔ながらの data propertyと ECMAScript の 5th edition で導入された accessor propertyとがあります。それぞれdefineProperty関数でのプロパティの記述子に表れる属性が異なります。
data property が持つ属性
value | プロパティの値。省略時 : undefined |
writable | 代入 によって value の値を書き換えられるかどうか。 true なら書き換え可能。省略時 : false |
enumerable | true なら for-in ループ中に値が現れる。 false なら現れない。省略時 : false |
configurable | false ならプロパティを delete したり、accessor property に変化させたり、プロパティの属性 (value を除く) を変更したりできない。省略時 : false |
accessor property が持つ属性
get | Undefined か関数。 プロパティの値が参照されたときに呼び出される。省略時 : undefined |
set | Undefined か関数。 プロパティへの値の代入が行われるときに呼び出される。省略時 : undefined |
enumerable | true なら for-in ループ中に値が現れる。 false なら現れない。省略時 : false |
configurable | false ならプロパティを delete したり、data property に変化させたり、プロパティの属性 (value を除く) を変更したりできない。省略時 : false |
// 普通のget setを使ったプロパティ定義
var o = {v : 1, get p() { return this.v; }, set p(x) { this.v = x; } };
o.p = 42;
は、次のようにします。
// defineProperty関数を使ったプロパティ定義
var o = { v : 1 };
Object.defineProperty(o, "p",
{
get : function() { return this.v; },
set : function(x) { this.v = x; },
enumerable : true,
configurable : true
}
);
o.p = 42;
属性の値によるプロパティの状態・性質は以下の例を参考してください。
例
・writable 属性
var o = {}; // Creates a new object
Object.defineProperty(o, "a", {value : 37,
writable : false});
alert(o.a); // 37
o.a = 25;
alert(o.a); // 37. 代入は効かない。また エラーは throwされない
・enumerable 属性
var i;
var o = {};
Object.defineProperty(o, "a", { value : 1, enumerable:true });
Object.defineProperty(o, "b", { value : 2, enumerable:false });
Object.defineProperty(o, "c", { value : 3 }); // enumerable は defaults値 false
o.d = 4;
for (i in o) {
alert(i);
}
// alerts 'a' then 'd'
・configurable 属性
var o = {};
Object.defineProperty(o, "a", { get : function(){return 1;},
configurable : false } );
Object.defineProperty(o, "a", {configurable : true}); // TypeError: can't redefine non-configurable property 'a'
Object.defineProperty(o, "a", {enumerable : true}); // TypeError: ...
Object.defineProperty(o, "a", {set : function(){}}); // TypeError: ...
Object.defineProperty(o, "a", {get : function(){return 1;}}); // TypeError: ...
Object.defineProperty(o, "a", {value : 12}); // TypeError: ...
alert(o.a); // 1
delete o.a; // プロパティ a は削除されない
alert(o.a); // 1
・普通のプロパティ追加と 属性がdefaultの場合 の違い
var o = {};
o.a = 1;
// これは次と同じ :
Object.defineProperty(o, "a", {value : 1,
writable : true,
configurable : true,
enumerable : true});
// 一方 :
Object.defineProperty(o, "a", {value : 1});
// これは以下と同じ :
Object.defineProperty(o, "a", {value : 1,
writable : false,
configurable : false,
enumerable : false});
複数のプロパティを定義, 変更
引数
obj : Object
プロパティ定義・変更するオブジェクト
props : Object
定義・変更するプロパティ記述子とプロパティ名から構成されるオブジェクト。
{ プロパティ名 : プロパティ記述子, ... }
返値
引数のobjを返します。
参照
例
var point = { x : 1, y : 2 };
// これは次と同じ :
var point = {};
Object.defineProperties(point,
{
x : {value : 1, writable : true, configurable : true, enumerable : true},
y : {value : 2, writable : true, configurable : true, enumerable : true}
}
);
プロパティの追加・削除・変更を凍結
引数
obj : Object
返値
引数のobjを返します。
参照
例
var obj =
{
prop: function () {},
foo: "bar"
};
// プロパティ追加、値変更、プロパティ削除ができます。
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
// オブジェクトを凍結する
var o = Object.freeze(obj);
print(o === obj); // true
print(Object.isFrozen(obj) === true); // true
// 値変更やプロパティ追加は失敗します。
obj.foo = "quux"; // 値変更しない。何も文句を言わない。
obj.quaxxor = "the friendly duck"; // プロパティ追加はできていない。何も文句を言わない。
// つぎに strictモードで試すとTypeErrorをthrowします。
function fail()
{
"use strict";
obj.foo = "sparky"; // TypeError: obj.foo is read-only
obj.sparky = "arf"; // TypeError: obj.sparky is not extensible
delete obj.foo; // TypeError: property obj.foo is non-configurable and can't be deleted
}
fail();
// Object.definePropertyを使うと TypeErrorをthrowします。
Object.defineProperty(obj, "ohai", { value: 17 }); // TypeError: Object.defineProperty(..., ({value:17})) is not extensible
Object.defineProperty(obj, "foo", { value: "eit", writable: true }); // TypeError: can't redefine non-configurable property 'foo'
オブジェクトが直接持つプロパティの記述子を取得
引数
obj : Object
プロパティを持つオブジェクト
prop : String
プロパティ名
返値
引数のobjを返します。
参照
例
var o, d;
o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, "foo");
print( uneval(d) );
/*
{get: getter func, set: undefined, enumerable:true, configurable:true}
*/
o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
print( uneval(d) );
/*
{value:42, writable:true, enumerable:true, configurable:true}
*/
o = {};
Object.defineProperty(o, "baz", { value: 8675309, writable: false, enumerable: false });
d = Object.getOwnPropertyDescriptor(o, "baz");
print( uneval(d) );
/*
{value:8675309, writable:false, enumerable:false, configurable:false}
*/
プロパティ(列挙不可属性を持つものも)の名前をすべて取得
引数
obj : Object
自身のプロパティを列挙したいオブジェクト
返値
objの直接のプロパティ名すべてを配列にして返します。
参照
例
var arr = ["a", "b", "c"];
print(Object.getOwnPropertyNames(arr).sort()); // 0,1,2,length
// 配列のようなオブジェクト
var obj = { 0: "a", 1: "b", 2: "c"};
print(Object.getOwnPropertyNames(obj).sort()); // 0,1,2
// 列挙付加なプロパティ
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } });
my_obj.foo = 1;
print(Object.getOwnPropertyNames(my_obj).sort()); // foo,getFoo
オブジェクトのプロトタイプオブジェクトを取得
引数
object : Object
プロトタイプオブジェクトを取得したいオブジェクト
返値
objectのプロトタイプオブジェクトを返します。
参照
例
function Foo() {}
obj = new Foo()
alert( Object.getPrototypeOf(obj)==obj.__proto__ ) // => true
alert( Object.getPrototypeOf(obj)==Foo.prototype ) // => true
オブジェクトが指定されたプロパティを持っているかどうかを判定
引数
prop : String
調べたいプロパティの名前。
返値
指定されたプロパティが、直接のプロパティとして持っていればtrueを返します。持っていなければfalseを返します。
解説
hasOwnProperty関数はあるオブジェクトが指定されたプロパティを、そのオブジェクトの直接のプロパティとして持っているかどうかを特定するのに使うことができます。in 演算子と違って、このメソッドはオブジェクトのプロトタイプチェーンをたどってチェックしません。
例
function Point(x,y) {
this.x = x;
this.y = y;
}
Point.prototype = {
move : function(dx,dy) {
this.x += dx;
this.y += dy;
},
};
var pnt = new Point(10,20);
alert( pnt.hasOwnProperty('x') ); //true
alert( pnt.hasOwnProperty('move') ); //false
参照
オブジェクトを拡張できるか判定
引数
obj : Object
調べたいオブジェクト。
返値
obj オブジェクトを拡張可能(extensible)なら true、拡張禁止(non-extensible)であれば falseを返します。
参照
例
// 新規オブジェクトは 拡張可能(extensible)です。
var empty = {};
print(Object.isExtensible(empty)); // true
// 拡張禁止に変更すると...
Object.preventExtensions(empty);
print(Object.isExtensible(empty)); // false
// オブジェクトが保護されていれば、保護の意味から拡張禁止(non-extensible)となります。
var sealed = Object.seal({});
print(Object.isExtensible(sealed)); // false
// 凍結された オブジェクトは、凍結の意味から拡張禁止(non-extensible)となります。
var frozen = Object.freeze({});
print(Object.isExtensible(frozen)); // false
オブジェクトが凍結されてるか判定
引数
obj : Object
調べたいオブジェクト。
返値
obj が凍結されていれば true, されていなければ falseを返します。
解説
オブジェクトが凍結されているとは、
・extensibleでない
・自身のすべてのプロパティがconfigurable==false
・自身の data プロパティ すべてが writable==false
・自身の accessor プロパティ すべてが setter を持たない
という状態のことです。
freezeクラス関数でオブジェクトを凍結させるとは、この状態にすることです。
すなわち プロパティの追加・削除・変更ができない状態にすることです。
参照
例
// 新規オブジェクトは extensibleなので、それは 凍結状態ではありません。
print( Object.isFrozen({}) ); // false
// 空の non-extensibleオブジェクトは、無意味な凍結状態です。
var vacuouslyFrozen = Object.preventExtensions({});
print(Object.isFrozen(vacuouslyFrozen)); // true
// 1つだけのプロパティを持つ新規オブジェクトは extensibleです。したっがて 凍結状態でない。
var oneProp = { p: 42 };
print(Object.isFrozen(oneProp)); // false
// オブジェクトを拡張不可にしても それはまだ凍結状態にはならない。
// なぜかというと、まだ configurable かつ writable であるから。
Object.preventExtensions(oneProp);
print(Object.isFrozen(oneProp)); // false
// しかし そのプロパティをdeleteすると、無意味な凍結状態になります。
delete oneProp.p;
print(Object.isFrozen(oneProp)); // true
// non-writableでconfigurableなプロパティを持つ non-extensible オブジェクトは 凍結状態ではない。
var nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", { writable: false }); // non-writableにする configurableはそのまま
print(Object.isFrozen(nonWritable)); // false
// プロパティをnon-configurable に変更したら、凍結状態になります。
Object.defineProperty(nonWritable, "e", { configurable: false }); // non-configurableにする
print(Object.isFrozen(nonWritable)); // true
// non-configurableでwritableなプロパティを持つ non-extensible オブジェクトは 凍結状態ではない。
var nonConfigurable = { release: "the kraken!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", { configurable: false });
print(Object.isFrozen(nonConfigurable)); // false
// プロパティをnon-writable に変更したら、凍結状態になります。
Object.defineProperty(nonConfigurable, "release", { writable: false });
print(Object.isFrozen(nonConfigurable)); // true
// configurable accessor プロパティを持つ拡張不可なオブジェクトは 凍結状態ではない。
var accessor = { get food() { return "yum"; } };
Object.preventExtensions(accessor);
print(Object.isFrozen(accessor)); // false
// しかし そのプロパティを non-configurable にすれば、凍結状態になります。
Object.defineProperty(accessor, "food", { configurable: false });
print(Object.isFrozen(accessor)); // true
// freezeスタティク関数を使えば、オブジェクトをもっと簡単に 凍結状態にできます。
var frozen = { 1: 81 };
print(Object.isFrozen(frozen)); // false
Object.freeze(frozen);
print(Object.isFrozen(frozen)); // true
// 凍結状態なので、 frozen オブジェクトは non-extensibleであります。
print(Object.isExtensible(frozen)); // false
// また同様に frozen オブジェクトは sealされています。
print(Object.isSealed(frozen)); // true
呼び出しオブジェクトが、引数で指定したオブジェクトのプロトタイプオブジェクトであるかを判定
引数
obj : Function
調べたいオブジェクト。
返値
objのプロトタイプチェーンをたどって、呼び出しオブジェクトobjectに一致すればtrueを返します。一致することがなければfalseを返します。
参照
例
function Foo() {}
function Bar() {}
obj = new Foo()
alert( Foo.prototype.isPrototypeOf(obj) ) // => true
alert( Bar.prototype.isPrototypeOf(obj) ) // => false
オブジェクトを保護されているかを判定
引数
obj : Object
調べたいオブジェクト。
返値
obj が保護されていれば true, されていなければ falseを返します。
参照
例
// defaultでは 保護されていない。
var empty = {};
print(Object.isSealed(empty)); // false
// 空の non-extensibleオブジェクトは、保護されている状態です。
Object.preventExtensions(empty);
print(Object.isSealed(empty)); // true
// 空でないオブジェクトのプロパティがすべてnon-configurableでなければ、保護されていない状態です。
var hasProp = { fee: "fie foe fum" };
Object.preventExtensions(hasProp);
print(Object.isSealed(hasProp)); // false
// しかし、プロパティをすべてnon-configurableにすれば、保護状態になります。
Object.defineProperty(hasProp, "fee", { configurable: false });
print(Object.isSealed(hasProp)); // true
// seal関数を使えば、最も簡単にオブジェクトを保護できます。
var sealed = {};
Object.seal(sealed);
print(Object.isSealed(sealed)); // true
// 保護されたオブジェクトはデフォルトで 拡張不可(non-extensible)になってます。
print(Object.isExtensible(sealed)); // false
// 保護されたオブジェクトは、凍結された状態かどうかは不定...
print(Object.isFrozen(sealed)); // true プロパティがすべて non-writableだから
var s2 = Object.seal({ p: 3 });
print(Object.isFrozen(s2)); // false "p" プロパティは writableだから
var s3 = Object.seal({ get p() { return 0; } });
print(Object.isFrozen(s3)); // true accessorプロパティがgetterだけだから
すべての列挙可能なプロパティ名を取得
引数
obj : Object
調べたいオブジェクト。
返値
obj の列挙可能な直接なプロパティ名をすべて配列にして返します。
参照
解説
keysクラス関数は、for...in はオブジェクト内の直接あるいは継承プロパティで列挙可能なものすべて取り出し、hasOwnProperty関数で直接プロパティかどうかを判断させれば、つぎのように関数を自作できます。
if(!Object.keys) Object.keys = function(o){
if (o !== Object(o))
throw new TypeError('Object.keys called on non-object');
var ret=[],p;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
return ret;
}
例
var arr = ["a", "b", "c"];
alert(Object.keys(arr)); // 0,1,2
// 配列ライクなオブジェクト
var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); // 0,1,2
// getFoo は 列挙不可なプロパティ
var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } });
my_obj.foo = 1;
alert(Object.keys(my_obj)); // foo
オブジェクトの拡張を禁止
引数
obj : Object
拡張を禁止したいオブジェクト
返値
obj を返します。
解説
オブジェクトが 拡張可能 extensibleであるとは、新しいプロパティが追加できることです。preventExtensionsクラス関数はオブジェクトをこれ以上拡張しないと印をつけるので、プロパティの追加はできません。しかし、まだプロパティのdeleteは可能であることはできます。non-extensibleなオブジェクトに新しいプロパティを追加すると、なにも言語エンジンは伝えないが失敗しています。もし、strictモードならTypeErrorをthrowします。
preventExtensionsクラス関数は指定したオブジェクトの直接のプロパティを拡張禁止するだけで、prototypeオブジェクトへのプロパティへの追加はまだ可能です。prototypeオブジェクトがセットしてある__proto__の値は変更はできないことを注意しておきます。
参照
例
// preventExtensionsクラス関数は non-extensibleにしたオブジェクトを返します。
var obj = {};
var obj2 = Object.preventExtensions(obj);
print(obj === obj2); // true
// defaultでは オブジェクトは extensible です。
var empty = {};
print(Object.isExtensible(empty)); // true
// 拡張禁止(non-extensible)に変更できます。
Object.preventExtensions(empty);
print(Object.isExtensible(empty)) // false
// non-extensibleなオブジェクトへ新しいプロパティを definePropertyクラス関数で追加すると TypeErrorが throwされます。
var nonExtensible = { removable: true };
Object.preventExtensions(nonExtensible);
Object.defineProperty(nonExtensible, "new", { value: 8675309 }); // throws a TypeError
// strict モードで、non-extensibleなオブジェクトへ新しいプロパティを代入で追加すると 同じくTypeErrorが throwされます。
function fail()
{
"use strict";
nonExtensible.newProperty = "FAIL"; // throws a TypeError
}
fail();
// non-extensible なオブジェクトの prototype は 変更できません。
var fixed = Object.preventExtensions({});
fixed.__proto__ = { oh: "hai" }; // throws a TypeError
指定されたプロパティが列挙可能かどうかを判定
引数
prop
調べたいプロパティの名前。
返値
指定されたプロパティが、直接のプロパティとして持っていて列挙可能であればtrueを返します。そうでなければfalseを返します。
例
o = new Object();
a = new Array();
o.prop = 'is enumerable';
a[0] = 'is enumerable';
o.propertyIsEnumerable('prop'); // true を返す
a.propertyIsEnumerable(0); // true を返す
a.propertyIsEnumerable('length'); // false を返す
参照
オブジェクトを保護する
引数
obj : Object
プロパティの削除を禁止するオブジェクト
返値
objを返します。
解説
デフォルトではオブジェクトは拡張可能 extensibleです(新規プロパティが追加できる)。オブジェクトを保護すれば プロパティが追加されるのを防ぎ、すでにあるプロパティをすべてnon-configurableとしてマークします。これはオブジェクトのプロパティの集合を固定かつ不変にする効果があります。non-configurableからdataプロパティをaccessorプロパティへ変更したりその逆 を防ぎます。しかし、プロパティ値の変更は可能です。新規にプロパティ登録したりプロパティの削除は失敗します。そのとき、何もいわないかstrictモードならTypeErrorをthrowします。
prototype chainは そのままですが、__proto__プロパティは保護されます。
参照
例
var obj =
{
prop: function () {},
foo: "bar"
};
// 新規にプロパティを追加でき、存在しているプロパティは変更も削除もできます。
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
var o = Object.seal(obj);
print(o === obj); // true
print(Object.isSealed(obj)); // true
// 保護されたオブジェクトのプロパティ値はまだ変更できます。
obj.foo = "quux";
// しかし、dataプロパティを accessorプロパティへ変換できません。その逆もできません。
Object.defineProperty(obj, "foo", { get: function() { return "g"; } }); // throws a TypeError
// 新規のプロパティ登録、プロパティ削除は失敗します。
obj.quaxxor = "the friendly duck"; // プロパティ登録に失敗しているが何も言わない。
delete obj.foo; // 同様に プロパティ削除に失敗しているが何も言わない。
// strictモードで 上記のことを実行させると TypeErrorがthrowされます。
function fail()
{
"use strict";
delete obj.foo; // throws a TypeError
obj.sparky = "arf"; // throws a TypeError
}
fail();
// definePropertyクラス関数を使って 登録と変更を行っても TypeErrorがthrowされます。
Object.defineProperty(obj, "ohai", { value: 17 }); // throws a TypeError
Object.defineProperty(obj, "foo", { value: "eit" }); // doesn't throw a TypeError
ローカルフォーマットで文字列化
返値
ローカルフォーマットで文字列化したものを返します。
通常はtoString関数を実行した結果を返しますが、objectのプロパティあるいはプロトタイプオブジェクトにtoLocaleString関数があればそれが実行され、その結果をこの関数は返します。
オブジェクトのソースコードを取得
返値
オブジェクトのソースコード文字列を返します。
解説
組み込みクラスについて toSource()関数が定義してあれば、それぞれ固有の形式で文字列を返してきます。
例えば
var a = new Array("A","B","C");
alert( a.toSource() ); // ["A","B","C"]
var func = new Function("a","b", "return a + b;");
alert( func.toSource() ); //(function anonymous(a, b) {return a + b;})
そのほかのクラスから作成されたオブジェクトでは、プロパティとその値を列挙した形式で文字列化されます。
例えば
var a = { a : 100, b : 200 };
alert( a.toSource() ); // ({a:100, b:200})
function Point( x, y )
{
this.x = x; this.y = y;
}
var pt = new Point(5,12);
alert( pt.toSource() ); // ({x:5, y:12})
参照
オブジェクトの値を表す文字列を取得
返値
オブジェクトの値を表す文字列をを返します。
解説
オブジェクトを文字列として表現したり、文字列と連結する必要があった場合、JavaScriptエンジンは
自動的にこのtoString()関数を呼び出します。
例えば、次の例ではtheDogは文字列化するが必要があります。
print( theDog );
print( "The dog is " + theDog );
デフォルトではObjectクラスから継承したオブジェクトはすべてtoString()を継承しています。
それらのtoString()関数は [object type]のような単純な文字列を返します。type はクラス名やコンストラクター関数の名前で
あったりします。
例えば
var o = new Object();
alert( o.toString() ); // [object Object]
toString関数は、overrideできます。
組み込みクラスのtoString()関数.
toString()が呼ばれたとき、オブジェクトにあった文字列化を返すようにoverrideしてます。
デフォルト toString()関数のoverrideの仕方.
ユーザークラス Dog を例にして、toString()関数をoverrideしてみましょう。
function Dog(name,breed,color,sex) {
this.name=name
this.breed=breed
this.color=color
this.sex=sex
}
theDog = new Dog("Gabby","Lab","chocolate","girl")
//ここまでなら
alert( theDog.toString() ); // [object Object]
function dogToString() {
var ret = "Dog " + this.name + " is [\n"
for (var prop in this){
if( ! (this[prop] instanceof Function) )
ret += " " + prop + " is " + this[prop] + ";\n"
}
return ret + "]"
}
// DogクラスのtoString関数をdogToString関数でoverrideします。
Dog.prototype.toString = dogToString;
//override後のtoString関数を実行
alert( theDog.toString() );
// 出力結果
// Dog Gabby is [
// name is Gabby;
// breed is Lab;
// color is chocolate;
// sex is girl;
// ]
参照
プロパティの代入監視関数を削除
引数
pro : String
プロパティ名
解説
watch関数で登録したプロパティの代入監視関数を削除します。
参照
指示されたオブジェクトの基本データを取得
返値
デフォルトでは 自分自身(呼び出したオブジェクト) を返します。
オブジェクトのクラスがvalueOf関数をoverrideしていれば、それに応じた値を返します。
解説
JavaScriptエンジンは、オブジェクトの基本データを必要となったとき自動的にvalueOf関数を呼び出します。
もちろん明示的に呼び出せます。
必要に応じて、クラスのvalueOf関数をoverrideできます。toString関数のoverride方法と同じです。
参照
プロパティへの代入を監視する関数を登録
引数
prop : String
プロパティ名
handler : Function
handelerは監視する関数を指定します。次の形式の関数です。
function handler(prop,oldval,newval)
{
// prop : プロパティ名
// oldval : prop の代入前の値
// newval : 代入される新しい値
・
// 処理
return propの新しい値; //通常は return newval;
}
解説
登録した代入監視関数を削除するには、unwatch関数を使います。
funcの解説をします。
例
o = {p:1}
o.watch("p",
function (id,oldval,newval) {
alert("o." + id + " changed from "
+ oldval + " to " + newval)
return newval
})
o.p = 2; // o.p changed from 1 to 2
o.p = 3 // o.p changed from 2 to 3
delete o.p
o.p = 4 // o.p changed from undefined to 4
o.unwatch('p')
o.p = 5 //
参照
オブジェクトにgetter関数を登録
引数
prop : String
プロパティ名
getter : Function
getter関数.
function getter() { return .... } 形式の関数
返値
なし
例
var d = Date.prototype;
d.__defineGetter__("year", function() { return this.getFullYear(); });
d.__defineSetter__("year", function(y) { this.setFullYear(y); });
var now = new Date;
print(now.year); //get ==> 2008
now.year=2010; //set ==>
print(now); //Thu Mar 04 2010 15:54:04 GMT+0900
参照
オブジェクトにsetter関数を登録
引数
prop : String
プロパティ名
setter : Function
setter関数.
function setter(v) { ..=..; } 形式の関数
返値
なし
参照
オブジェクトに登録されているgetter関数を取得
引数
prop : String
プロパティ名
返値
オブジェクトの指定したプロパティにgetter関数が登録されていれば、その関数を返します。登録されていなければundefinedを返します。
参照
オブジェクトに登録されているsetter関数を取得
引数
prop : String
プロパティ名
返値
オブジェクトの指定したプロパティにsetter関数が登録されていれば、その関数を返します。登録されていなければundefinedを返します。
参照
このクラスの解説は内容が古く、最新版の仕様説明になっておりません。
以下のサイトを参照してくださいませ。
Proxy(日本語)解説
Proxy(英語)解説
Proxyオブジェクトは、オブジェクトや関数の規定動作を ユーザーの設定した関数で実行させる特殊なオブジェクトであります。
以下の動作がユーザー設定できます。
・ プロパティアクセス(代入、取得)
・ プロパティの属性変更
・in 演算子の適用
・delete 演算子の適用
・関数呼出、コンストラクター(F()、new F())
Proxyはまだプロタイプ実装であり 将来 仕様変更されることが十分あります。したがって、Proxyクラスの使用を自己責任のもとで使ってください。(2011/04/06)
プロパティアクセス例
var userobj = Proxy.create({
get: function(recvr, name) { return "Hello " + name + "!"; }
});
alert( userobj.JavaScript ); // Hello JavaScript!
alert( userobj.ECMAScript ); // Hello ECMAScript!
Proxyオブジェクトは、ユーザー設定を定義したhandlerでProxy.
create関数を実行して作成します。
上記の例では、Proxyオブジェクトuserobjへプロパティアクセスすると handlerのget関数がプロパティ値を返してます。
このProxyオブジェクトの機能を利用して、普通のオブジェクトをラップして アクセス履歴を取る、少し実用的な例を以下に出します。
プロパティアクセス履歴
var Logging = "";
function simpleLogging( target, myname ) {
var handler = {
get: function(recvr,name) {
Logging += myname + ": get( " + name + " )\n";
return target[name];
},
set: function(recvr,name,val) {
Logging += myname + ": set( " + name + ", " + val + " )\n";
target[name] = val;
return true;
},
delete: function(name) {
Logging += myname + ": delete( " + name + " )\n";
delete target[name];
return true;
}
};
return Proxy.create(handler);
}
var pnt1 = { x:0, y:0 }, pnt2 = { x:10, y:20, z:30 };
var pnt1L = simpleLogging( pnt1, "pnt-1" );
var pnt2L = simpleLogging( pnt2, "pnt-2" );
pnt1L.x = 100;
pnt2L.y = -pnt1L.x;
delete pnt2L.z;
print(Logging);
/*
pnt-1: set( x, 100 )
pnt-1: get( x )
pnt-2: set( y, -100 )
pnt-2: delete( z )
*/
print( uneval(pnt2) ); // ({x:10, y:-100, z:30})
関数オブジェクトもラップできます。それにはProxy.
createFunction関数を使います。
Proxyオブジェクトのその他の操作は handlerに決められた名前の関数(handle関数)が実行されます。
そのJavScript操作とそれを実行するhandle関数は以下のように対応します。
handle関数は、基本handle関数群とオプションhandle関数群の2種類に分けられ、前者はJavaScript操作された場合、そのhandle関数がないとTypeErrorエラーがthrowされますが、後者はhandle関数がhandlerに設定されていない場合、default実装が実行されます。
基本handle関数
Object.getOwnPropertyDescriptor(proxy, name) |
getOwnPropertyDescriptor: function(name) -> PropertyDescriptor | undefined |
プロパティディスクリプタを返します。undefined値を返すと、nameプロパティがないことになります。
|
Object.getPropertyDescriptor(proxy, name) |
getOwnPropertyDescriptor: function(name) -> PropertyDescriptor | undefined |
この関数は ECMAScript5にはありません。getOwnPropertyDescriptor関数に似ていますが、プロトタイプチェーンをサーチしなければいけません。
|
Object.getOwnPropertyNames(proxy) |
getOwnPropertyNames: function() -> Strings Array |
自分自身のすべてのプロパティ名の配列を返します。
|
Object.defineProperty(proxy,name,pd) |
defineProperty: function(name, propertyDescriptor) -> any |
プロパティディスクリプタで決められた属性のプロパティを定義します。返値は無視されます。
|
delete proxy.name |
delete: function(name) -> boolean |
proxyから プロパティを先所します。Boolean値を返し、削除に成功したどうかを示します。
|
Object.freeze(proxy)
Object.seal(proxy)
Object.preventExtensions(proxy)
|
fix: function() -> PropertyDescriptor map (indexed on property names) | undefined |
プロパティ名とディスクリプタの対応マップオブジェクトを返します。fix()が呼び出された後、そのproxyはreturn値内にリストアップされたプロパティを持つ普通のオブジェクト(non-proxy)になります。そして そのhandlerはもう使われません。更にその普通のオブジェクトにそれぞれの関数(freeze(), seal(), or preventExtension())が実行されます。注記:fixされたオブジェクトはproxyオブジェクトと同一です。
|
オプションhandle関数
name in proxy |
has: function(name) -> boolean |
function(name) {
return !!this.getPropertyDescriptor(name);
} |
|
Object.hasOwnProperty(proxy, name) |
hasOwn: function(name) -> boolean |
function(name) {
return !!this.getOwnPropertyDescriptor(name);
} |
|
proxy.name
receiver.name (receiverがproxyから継承していて、nameをoverrideしていない場合)
|
get: function(receiver, name) -> any |
function(receiver, name) {
var desc = this.getPropertyDescriptor(name);
if (desc === undefined) { return undefined; }
if ('value' in desc) {
return desc.value;
} else {
if (desc.get === undefined) {
return undefined;
}
return desc.get.call(receiver);
}
} |
receiverは proxy または proxyから継承したオブジェクト。 |
proxy.name = val
receiver.name = val (receiverがproxyから継承していて、nameをoverrideしていない場合)
|
set: function(receiver, name, val) -> boolean |
function(receiver, name, val) {
var desc = this.getOwnPropertyDescriptor(name);
if (desc) {
if ('writable' in desc) {
if (desc.writable) {
desc.value = val;
this.defineProperty(name, desc);
return true;
} else {
return false;
}
} else { // accessor
if (desc.set) {
desc.set.call(receiver, val);
return true;
} else {
return false;
}
}
}
desc = this.getPropertyDescriptor(name);
if (desc) {
if ('writable' in desc) {
if (desc.writable) {
// fall through
} else {
return false;
}
} else { // accessor
if (desc.set) {
desc.set.call(receiver, val);
return true;
} else {
return false;
}
}
}
this.defineProperty(name, {
value: val,
writable: true,
enumerable: true,
configurable: true});
return true;
} |
receiverは proxy または proxyから継承したオブジェクト。 |
for(prop in proxy){...} |
enumerate: function() -> String Array |
function() {
return this.getPropertyNames().filter(
function (name) {
return this.getPropertyDescriptor(name).enumerable
} );
} |
|
Object.keys(proxy) |
keys: function() -> String Array |
function() {
return this.getOwnPropertyNames().filter(
function (name) {
return this.getOwnPropertyDescriptor(name).enumerable
});
} |
|
Proxyオブジェクト作成
引数
handler : Object
オブジェクト操作をtrapするhandler
proto : Object
Proxyオブジェクトのプロトタイプ。省略した場合 null。
Object.getPrototypeOf(proxy)==proto
返値
作成されたProxyオブジェクトを返します。
例
// 1. Simple logging
var Logging = "";
function simpleLogging( target, myname ) {
var handler = {
get: function(recvr,name) {
Logging += myname + ": get( " + name + " )\n";
return target[name];
},
set: function(recvr,name,val) {
Logging += myname + ": set( " + name + ", " + val + " )\n";
target[name] = val;
return true;
}
};
return Proxy.create(handler, Object.getPrototypeOf(target));
}
function Point(x,y) {
this.x = x;
this.y = y;
};
Point.prototype.abs = function () {
return Math.sqrt(this.x*this.x + this.y*this.y);
}
var pnt = new Point(0,4);
var pntL = simpleLogging( pnt, "pnt" );
pntL.x = 3;
print(pntL.abs()); // 5
print(Logging);
/*
pnt: set( x, 3 )
pnt: get( abs )
pnt: get( x )
pnt: get( x )
pnt: get( y )
pnt: get( y )
*/
print( pnt instanceof Point ); //true
print( pntL instanceof Point ); //true
print( "x" in pnt ); //true
print( "x" in pntL ); //TypeError: getPropertyDescriptor is not a function
Logging = ""; // clear logs
// 2. Complete logging
// 参照:ForwardingHandlerのソース
ForwardingHandler(target) {
this.target = target;
}
ForwardingHandler.prototype = {
// Object.getOwnPropertyDescriptor(proxy, name) -> pd | undefined
getOwnPropertyDescriptor: function(name) {
var desc = Object.getOwnPropertyDescriptor(this.target, name);
if (desc !== undefined) { desc.configurable = true; }
return desc;
},
//.....
};
Proxy.Handler = ForwardingHandler;
//-------------------------------------
function makeLogging( target, myname ) {
var handler = new Proxy.Handler(target);
handler.get = function(recvr,name) {
Logging += myname + ": get( " + name + " )\n";
return target[name];
};
handler.set = function(recvr,name,val) {
Logging += myname + ": set( " + name + ", " + val + " )\n";
target[name] = val;
return true;
}
};
return Proxy.create(handler, Object.getPrototypeOf(target));
}
var Logging = "";
function makeLogging( target, myname ) {
var handler = new Proxy.Handler(target);
handler.get = function(recvr,name) {
Logging += myname + ": get( " + name + " )\n";
return target[name];
};
handler.set = function(recvr,name,val) {
Logging += myname + ": set( " + name + ", " + val + " )\n";
target[name] = val;
return true;
};
return Proxy.create(handler, Object.getPrototypeOf(target));
}
function Point(x,y) {
this.x = x;
this.y = y;
};
Point.prototype.abs = function () {
return Math.sqrt(this.x*this.x + this.y*this.y);
}
var pnt = new Point(0,4);
var pntL = makeLogging( pnt, "pnt" );
pntL.x = 3;
print(pntL.abs()); // 5
print(Logging);
/*
pnt: set( x, 3 )
pnt: get( abs )
pnt: get( x )
pnt: get( x )
pnt: get( y )
pnt: get( y )
*/
print( pnt instanceof Point ); //true
print( pntL instanceof Point ); //true
print( "x" in pnt ); //true
print( "x" in pntL ); //true !
Proxy関数オブジェクト作成
引数
handler : Object
オブジェクト操作をtrapするhandler
callTrap : Object
関数 function (arg...) { ... return any; }
fproxy(arg...) は、callTrap(arg...)として実行されます。
callTrap関数内でのthisは、呼び出し側のthisがbindされてます。
constructTrap : Object
関数 function (arg...) { ... return any-object; }
new fproxy(arg...) は、constructTrap(arg...)として実行されます。
constructTrap関数内でのthisは strictモードではundefined、non-strictモードではグローバルオブジェクトがbindされてます。
constructTrapが省略された場合、new fproxy(arg...) は、new callTrap(arg...)として実行されます。
返値
作成された関数型のProxyオブジェクトを返します。
例
var simpleHandler = {
get: function(proxy, name) {
// can intercept access to the 'prototype' of the function
if (name === 'prototype') return Object.prototype;
return 'Hello, '+ name;
}
};
var fproxy = Proxy.createFunction(
simpleHandler,
function() { return arguments[0]; }, // call trap
function() { return arguments[1]; }); // construct trap
print( fproxy(1,2) ); // 1
print( new fproxy(1,2) ); // 2
print( fproxy.prototype==Object.prototype); // true
print( fproxy.foo ); // 'Hello, foo'
RegExpは正規表現パターンを扱うクラスです。
検索に必要なプロパティや関数を揃えています。
作成方法
リテラル形式
/pattern/flags
コンストラクター
new RegExp( "pattern"[, "flags"] )
パラメーター
pattern |
正規表現テキスト
|
flags |
指定がある場合は以下の文字を組み合わせます。
g : pattern に指定したパターンと一致する文字列をすべて検索するグローバル検索
i : 大文字小文字を区別しない
m : 複数行検索
y : 対象文字列中の正規表現の lastIndex プロパティによって示された位置からのみマッチするようになります
|
例.
/ab+c/i
new RegExp("ab+c", "i")
解説
正規表現パターンのテキストには \ を使いますのでコンストラクターを使う場合、エスケープ規則(\xx)が必要になります。
例えば、
re = new RegExp("\\w+")
re = /\w+/
正規表現で使われる特殊文字のリストテーブルを以下に記述します。
これらを組み合わせて、正規表現パターンを作成します。
Table 1.1正規表現での特殊文字
\ |
\の後に英数字が続くと正規表現の特殊文字となりえます。
\の後に\,^,$, ... などの特殊文字を表す文字がが現れた場合には本来の文字に解釈されます。
例えば /a*/ は a が0個以上続いた文字列と一致しますが、/a\*/ では 'a*' と一致します。
|
^ |
入力文字列の先頭と一致します。m フラッグが設定されている場合、^ は '\n' または '\r' の直後にも一致します。
|
$ |
入力文字列の末尾と一致します。m フラッグが設定されている場合、$ は '\n' または '\r' の直前にも一致します。
|
* |
直前の項目と 0 回以上一致します。たとえば、"zo*" は "z" とも "zoo" とも一致します。* は {0,} と同じ意味になります。
|
+ |
直前の項目と 1 回以上一致します。たとえば、"zo+" は "zo" や "zoo" とは一致しますが、"z" とは一致しません。+ は {1,} と同じ意味になります。
|
? |
直前の項目と 0 回または 1 回一致します。たとえば、"do(es)?" は "do" または "does" の"do" と一致します。? は {0,1} と同じ意味になります。
|
. |
"\n" を除く任意の 1 文字に一致します。'\n' など、任意の文字と一致するには、'[\s\S]' などのパターンを指定します。
|
(x) |
パターンxと一致し、文字列を記憶します。たとえば、/(foo)/ は "foo bar." の "foo" と一致し記憶されます。
それは,配列結果の [1], ..., [n] や RegExp.$1, ..., RegExp.$9 で取り出します。
|
(?:x) |
パターンxと一致しても、その文字列は記憶されず、後で使用することはできません。
|
x(?=y) |
x の後に y が一致したとき x と一致します。(?=y)と一致した部分は記憶されません。
|
x(?!y) |
x の後に y と一致しなかったときのみ x と一致します。(?!y)の部分は記憶されません。
|
x|y |
x または y と一致します。たとえば、'z|food' は "z" または "food" と一致します。"(z|f)ood" は "zoo" または "food" に一致します。
|
{n} |
n には 0 以上の整数を指定します。正確に n 回一致します。たとえば、'o{2}' は "Bob" の 'o' とは一致しませんが、"food" の 2 つの o とは一致します。
|
{n,} |
n には 0 以上の整数を指定します。少なくとも n 回一致します。たとえば、'o{2}' は "Bob" の "o" とは一致しませんが、"foooood" のすべての o とは一致します。'o{1,}' は 'o+' と同じ意味になります。'o{0,}' は 'o*' と同じ意味になります。
|
{n,m} |
m および n には 0 以上の整数を指定します。n は m 以下です。n ~ m 回一致します。たとえば、"o{1,3}" は "fooooood" の最初の 3 つの o と一致します。'o{0,1}' は 'o?' と同じ意味になります。
|
[xyz] |
文字セットを指定します。角かっこで囲まれた文字の中のいずれかに一致します。たとえば、'[abc]' は "plain" の 'a' と一致します。
|
[^xyz] |
除外する文字セットを指定します。角かっこで囲まれた文字以外の文字に一致します。たとえば、'[^abc]' は "plain" の 'p' と一致します。
|
[\b] |
バックスペースと一致します。
|
\b |
単語の境界と一致します。単語の境界とは、単語とスペースとの間の位置のことです。たとえば、'er\b' は "never" の 'er' と一致しますが、"verb" の 'er' とは一致しません。
|
\B |
単語境界以外と一致します。たとえば、'er\B' は "verb" の 'er' と一致しますが、"never" の 'er' とは一致しません。
|
\cX |
x で指定した制御文字と一致します。たとえば、\cM は Control-M またはキャリッジ リターン文字と一致します。x の値は、A-Z または a-z の範囲内で指定します。それ以外を指定すると、リテラル文字 "c" と認識されます。
|
\d |
任意の 10 進文字と一致します。[0-9] と同じ意味になります。
|
\D |
10 進数字以外の任意の 1 文字と一致します。[^0-9] と同じ意味になります。
|
\f |
フォームフィード文字と一致します。\x0c および \cL と同じ意味になります。
|
\n |
改行文字と一致します。\x0a および \cJ と同じ意味になります。
|
\r |
キャリッジ リターン文字と一致します。\x0d および \cM と同じ意味になります。
|
\s |
スペース、タブ、フォームフィードなどの任意の空白文字と一致します。[ \f\n\r\t\v] と同じ意味になります。
|
\S |
空白文字以外の任意の文字と一致します。[^ \f\n\r\t\v] と同じ意味になります。
|
\t |
タブ文字と一致します。\x09 および \cI と同じ意味になります。
|
\v |
垂直タブ文字と一致します。\x0b および \cK と同じ意味になります。
|
\w |
単語に使用される任意の文字と一致します。アンダースコアも含まれます。'[A-Za-z0-9_]' と同じ意味になります。
|
\W |
単語に使用される文字以外の任意の文字と一致します。'[^A-Za-z0-9_]' と同じ意味になります。
|
\num |
num には正の整数を指定します。既に見つかって記憶されている部分と一致します。たとえば、'(.)\1' は、連続する 2 つの同じ文字と一致します。
|
\0 |
ヌル文字と一致します。
|
\xhh |
ASCII 文字を表した 2 桁の 16 進数を指定します。
|
\u hhhh |
Unicode 文字で表した 4 桁の 16 進数を指定します。
|
globalプロパティ |
正規表現にフラッグ g が使われているかどうかの判定 |
ignoreCaseプロパティ |
正規表現にフラッグ i(大文字と小文字の違いを無視) が使われているかどうかの判定 |
lastIndexプロパティ |
次の探索位置開始位置 |
multilineプロパティ |
正規表現にフラッグ m(複数行)が使われているかどうかの判定 |
sourceプロパティ |
正規表現から / とフラッグを除いたテキスト |
RegExpコンストラクター |
RegExpオブジェクトの作成 |
compile関数 |
正規表現を変更 |
exec関数 |
正規表現パターンを使って文字列に対して検索を実行 |
test関数 |
文字列内でパターンに一致する部分が存在するかどうかを判定 |
toSource関数 |
RegExpオブジェクトのリテラル表示を取得 |
toString関数 |
RegExpオブジェクトのリテラル表示を取得 |
inputクラスプロパティ |
RegExpオブジェクトのリテラル表示を取得 |
lastMatchクラスプロパティ |
最後にマッチングのテキスト(read only) |
lastParenクラスプロパティ |
最後の括弧付きサブ表現にマッチしたテキスト(read only) |
lastParenクラスプロパティ |
最後の括弧付きサブ表現にマッチしたテキスト(read only) |
multilineクラスプロパティ |
パターンマッチングがマルチラインモードで行われているかどうか |
rightContextクラスプロパティ |
最後にマッチしたサブストリングの後のテキスト(read only) |
$nクラスプロパティ |
最後にマッチした括弧に囲まれたサブ表現(read only) |
最後にマッチしたサブストリングの前のテキスト(read only)
例
a = /ab+c/i; // a = new RegExp("ab+c", "i")
alert( a.constructor==RegExp ); //true
参照
正規表現にフラッグ
g が使われているかどうかの判定
解説
正規表現にフラッグ g が使われていれば trueを返し、使われていなければ falseを返します。
正規表現にフラッグ g が使われていれば 検索文字列内のパターンの最初の 1 候補だけではなく、
すべての候補を検索できます。
正規表現にフラッグ
i(大文字と小文字の違いを無視) が使われているかどうかの判定
解説
正規表現にフラッグ i が使われていれば trueを返し、使われていなければ falseを返します。
正規表現にフラッグ i が使われていれば 検索で大文字小文字を区別しません。
次の探索位置開始位置
解説
lastIndexOfプロパティは、正規表現が、グローバルサーチを示す"g" を使用した場合にのみ、セットされます。
exec関数で実行結果が返ったとき,その一致した文字列の次位置がセットされます。
exec関数を再度実行すると次の位置から検索を開始します。
lastIndexの値を変更すれば検索開始位置をコントロールできます。
正規表現にフラッグ
m(複数行)が使われているかどうかの判定
解説
正規表現にフラッグ m が使われていれば trueを返し、使われていなければ falseを返します。
multiline が false のとき、"^" で文字列の先頭位置に一致し、"$" で文字列の最終位置に一致します。
multiline が true のとき、"^"で、"\n" または "\r" の直後を含む文字列の先頭位置に一致し、"$" で、"\n" または "\r" の直前を含む文字列の最終位置に一致します。
正規表現から / とフラッグを除いたテキスト
解説
正規表現から / とフラッグを除いたテキストを返します。
RegExpオブジェクトの作成
引数
pattern : String
正規表現テキスト Table 1.1正規表現での特殊文字
flags : String
以下の文字を組み合わせた文字列を与えます。
g : pattern に指定したパターンと一致する文字列をすべて検索するグローバル検索
i : 大文字小文字を区別しない
m : 複数行検索
y : 対象文字列中の正規表現の lastIndex プロパティによって示された位置からのみマッチするようになります
返値
作成されたRegExpオブジェクトを返します。
解説
リテラル形式で RegExpオブジェクトを作成することもできます。
/pattern/flags
ここでのpattern, flagsは文字列の前後に置く " , ' を除いてます。また正規表現での特殊文字 \xx は素直に使えます。
コンストラクターの引数 pattern は、通常の文字列なので \\xx と \を2つ続けて記述する必要があります。
また、コンストラクターの引数 pattern, flags は,文字列なので、ダイナミックに変更できるRegExpオブジェクトを
作成できます。
例
/ab+c/i
new RegExp("ab+c", "i")
正規表現を変更
引数
pattern : String
正規表現テキスト Table 1.1正規表現での特殊文字
flags : String
以下の文字を組み合わせた文字列を与えます。
g : pattern に指定したパターンと一致する文字列をすべて検索するグローバル検索
i : 大文字小文字を区別しない
m : 複数行検索
y : 対象文字列中の正規表現の lastIndex プロパティによって示された位置からのみマッチするようになります
返値
自分自身(regexp)を引数条件の正規表現に変更して、自分自身を返します。
例
var reg = new RegExp("abc");
alert( reg.test("xyz abc") ); // true
alert( reg.test("xyz 123") ); // false
reg.compile("123");
alert( reg.test("xyz abc") ); // false
alert( reg.test("xyz 123") ); // true
参照
正規表現パターンを使って文字列に対して検索を実行
引数
str : String
検索対象とする文字列
返値
パターンに一致する文字列が見つからなかった場合、exec メソッドは null を返します。
検索結果を含む配列を返します。
返された配列の内容は、例で説明します。
myRe=/d(b+)(d)/ig;
myArray = myRe.exec("cdbBdbsbz");
myArray
|
配列の中身 | ["dbBd", "bB", "d"]
|
index |
一致した位置 | 1
|
input | 検索対象文字列 | cdbBdbsbz
|
[0] | 最後に一致した文字列 | dbBd
|
[1], ..., [n] |
正規表現パターン内の(...)に一致したサブ文字列が格納されます。 |
[1] = bB [2] = d
|
myRe.lastIndex は 5 に更新されて一致した文字列の次の位置がセットされます。
つぎの検索位置がセットされます。
再度
myArray = myRe.exec("cdbBdbsbz");
を実行するとつぎの一致位置を見つけてくれます。
解説
参照
文字列内でパターンに一致する部分が存在するかどうかを判定
引数
str : String
検索対象となる文字列を指定します。
返値
文字列内にパターンに一致する部分があれば trueを返し、なければ falseを返します。
解説
ただ単にパターンに一致する部分があるかどうかなら,test関数を使います。(Stringクラスのsearch関数も同じ)
もっと一致した詳しい情報を取得したい場合には exec関数を利用してください。(Stringクラスのmatch関数も同じ)
例
function testinput(re, str){
if (re.test(str))
laststring = " を含みます。";
else
laststring = " を含みません。";
alert(str + " は " + re.source + laststring );
}
testinput( /pen|chopstick/, "This is a pen." ); // This is a pen. は pen|chopstick を含みます。
参照
RegExpオブジェクトのリテラル表示を取得
返値
RegExpオブジェクトのリテラル表示を文字列にして返します。
解説
toString関数と同じです。
例
var re = new RegExp("ab+c", "i");
alert( re.toSource() ); ///ab+c/i
参照
RegExpオブジェクトのリテラル表示を取得
返値
RegExpオブジェクトのリテラル表示を文字列にして返します。
解説
toSource関数と同じです。
例
var re = new RegExp("ab+c", "i");
alert( re.toString() ); // ab+c/i
参照
パターンマッチングに使用されるテキストを指定
解説
regexp.exec()やregexp.test()に何も文字列が渡されない場合にパターンマッチングに使用されるテキストを指定します。
最後にマッチングのテキスト(read only)
解説
RegExpまたはStringのパターンマッチングメソッドで実行された最後の成功したマッチングのテキストを表します。
最後の括弧付きサブ表現にマッチしたテキスト(read only)
解説
RegExpまたはStringのパターンマッチングメソッドが実行した最後に成功したマッチングでの最後の括弧付きサブ表現にマッチしたテキストを表します。
最後にマッチしたサブストリングの前のテキスト(read only)
解説
RegExpまたはStringのパターンマッチングメソッドが実行した最後のマッチングでマッチしたサブストリングの前のテキストを表します。
パターンマッチングがマルチラインモードで行われているかどうか
解説
パターンマッチングがマルチラインモードで行われているかどうかを示します。このプロパティがtrueの場合は、^や$のパターンは、文字列の先頭と終端だけではなく、その文字列の行の先頭と終端もマッチングを行います。RegExp.multilineは読み書き可能なプロパティなので、いつでも設定できます。
最後にマッチしたサブストリングの後のテキスト(read only)
解説
RegExpまたはStringのパターンマッチングメソッドが実行した最後に成功したマッチングでマッチしたサブストリングのあとのテキストを表します。
最後にマッチした括弧に囲まれたサブ表現(read only)
解説
最後に成功したマッチングで1番目から9番目にマッチした括弧に囲まれたサブ表現を持っています。このマッチングは、RegExpまたはStringパターンマッチングメソッドで試みられたものです。正規表現の括弧付きのサブ表現が9個以下の場合は、すべてのプロパティが使用されないことがあります。もし正規表現に9個以上の括弧付きサブ表現がある場合には、9番目よりあとの値は保存されません。。
文字列のラッパークラスです。
文字列(リテラル)と文字列オブジェクトとは違います。
s1 = "foo"; // 文字列(リテラル)データ作成
s2 = new String("foo"); // 文字列オブジェクト作成
文字列(リテラル)データは文字列オブジェクトの関数が直接使えます。
これは、JavaScriptが内部で自動的に文字列オブジェクトに変換してから関数を呼び出し、一時的に作成
されたその文字列オブジェクトは削除されます。
オブジェクトのプロトタイプを生成する関数
例
a = "abc"; // a = new String("abc");
alert( a.constructor==String ); //true
参照
文字列の長さを取得
解説
文字列の長さを返します。
例
var x = "ABCDEFG";
var japanese = "日本語";
alert( x.length ); // 7
alert( japanese.length ); //3
i 番目の文字にアクセス
解説
i は、0 から length - 1 までの正の整数です。このプロパティは読み込み専用です。
例
var x = "ABCDEFG";
alert( x[5] ); // F
文字列オブジェクトの作成
引数
string : String
文字列
返値
作成された文字列オブジェクトを返します。
指示位置の文字を取得
引数
index : Integer
0~文字の長さ-1
返値
先頭からindex番目の文字を返します。先頭はindex=0
indexが0~文字の長さ-1外なら空文字列を返します。
例
var anyString="0123あいう";
alert(anyString.charAt(2)); // 2
alert(anyString.charAt(5)); // い
参照
指示位置の文字コード(Unicode)を取得
引数
index : Integer
0~文字の長さ-1 デファオルトは0
返値
先頭からindex番目の文字コード(Unicode)を返します。先頭はindex=0
Unicode値 0~128はASCIIコードと一致しています。
解説
funcの解説をします。
例
alert( "ABC".charCodeAt(0) ); // 65
参照
2つ以上の文字列を連結
引数
string2, string3, ..., stringN : String
連結される文字列
返値
連結した文字列を返します。
解説
funcの解説をします。
例
s1="Oh ";
s2="what a beautiful ";
s3="mornin'.";
s4=s1.concat(s2,s3);
alert(s4); // "Oh what a beautiful mornin'."
Unicode列から文字列を作成
引数
num1, ..., numN : Integer
Unicode列
返値
Unicode列から生成された文字列を返します。
解説
funcの解説をします。
例
alert( String.fromCharCode(65,66,67) ); // "ABC"
参照
文字列検索
引数
searchValue : String
String オブジェクト内で検索する文字列
fromIndex : Integer
検索開始位置 0~文字列長さ-1 省略した場合、文字列の先頭から検索が開始されます。
返値
String オブジェクト内で見つかった検索文字列の先頭位置を返します。
見つからなければ-1を返します。
例
"Blue Whale".indexOf("Blue") // 0
"Blue Whale".indexOf("Blute") // -1
"Blue Whale".indexOf("Whale",0) // 5
"Blue Whale".indexOf("Whale",5) // 5
"Blue Whale".indexOf("",9) // 9
"Blue Whale".indexOf("",10) // 10
"Blue Whale".indexOf("",11) // 10
"Blue Whale".indexOf("blue") // -1 大文字・小文字は区別
参照
後方から文字列検索
引数
searchValue : String
String オブジェクト内で検索する文字列
fromIndex : Integer
検索開始位置 0~文字列長さ-1 省略した場合、文字列の末尾から検索が開始されます。
返値
String オブジェクト内で見つかった検索文字列の先頭位置を返します。
見つからなければ-1を返します。
例
"canal".lastIndexOf("a") // 3
"canal".lastIndexOf("a",2) // 1
"canal".lastIndexOf("a",0) // -1
"canal".lastIndexOf("x") // -1
"Blue Whale, Killer Whale".lastIndexOf("blue") // -1 大文字・小文字は区別
var anyString="Brave new world"
anyString.lastIndexOf("new") //6
anyString.indexOf("new") //6
参照
文字列を辞書式順序で比較
引数
str : String
比較する文字列。
返値
2つの文字列(string,str)を辞書式順序で比較して、strが前にあれば正の整数を返します。同じであれば0を返します。 strが後にあれば負をを返します。
例
"JavaScript".localeCompare("javascript"); //-32
"JavaScript".localeCompare("javascript"); // 0
"javascript".localeCompare("JavaScript"); //32
正規表現または検索文字列を使って検索結果を配列で取得
引数
regexp : RegExp | String
正規表現パターンおよびフラグを含む RegExpオブジェクトを指定します。文字列を指定することもできます。
regexp がRegExpオブジェクトでない場合は文字列に変換して、完全に一致する文字列の検索が実行されます。
返値
パターンに一致する文字列が見つからなかった場合、null を返します。
一致する文字列が見つかった場合は、結果を配列にセットして返します。
解説
regexpにグローバル フラグ (g) が設定されていない場合、RegExpオブジェクト.exec(..)と同じ結果が返ってきます。
0 に一致したサブ文字列がセットされ、1~n-1には正規表現内の(..)に対応したサブ文字列がセットされます。
regexpにグローバル フラグ (g) が設定されている場合、要素 0 から n-1 には検出されたすべての一致がそれぞれセットされます。
n は、返してきた配列の長さです。
例
ss = "cdbBdbsbz dbd";
myRe=/d(b+)(d)/i;
myArray = ss.match(myRe);
alert( myArray ); // dbBd,bB,d
ss = "cdbBdbsbz dbd";
myRe=/d(b+)(d)/ig;
myArray = ss.match(myRe);
alert( myArray ); // dbBd,dbd
参照
正規表現または検索文字列を使って置換した文字列
引数
regexp : RegExp | String
正規表現パターンおよびフラグを含む RegExpオブジェクトを指定します。文字列を指定することもできます。
regexp がRegExpオブジェクトでない場合は文字列に変換して、完全に一致する文字列の検索が実行されます。
newSubStr : String
検索で見つかった部分を置換する文字列を指定します。
この文字列内に $x を含めて加工した文字列置換を行なえます。解説を参照してください。
function : Function
regexpと一致するサブ文字列が見つかったとき呼び出される関数を指定します。
一致したサブ文字列をこの関数が返した文字列で置換します。
この関数の仕様は以下のとうりです。
function func( substr, m1, ..., mN, pos, text )
{
// substr : 一致したサブ文字列
// m1, ..., mN : regexp の中で使用されている開き括弧に対応した検索結果
// pos : 一致位置
// text : この関数を呼び出した文字列オブジェクトの文字列
・
// 処理
return 置換文字列;
}
返値
呼び出した文字列オブジェクトの文字列を正規表現または検索文字列を使って置換した文字列のコピーを返します。
解説
引数newSubStrの文字列内で使える $x は、置換処理を動的に行なえます。$x は以下の文字列置換を行ないます。
$$ |
$ に置き換えます。
|
$& |
一致したサブ文字列を置き換えます。
|
$` |
一致したサブ文字列の前の部分の文字列を置き換えます。
|
$' |
一致したサブ文字列の後の部分の文字列を置き換えます。
|
$n |
n は0~99までの整数。n 番目の(..)に対応した文字列を置き換えます。
|
例
// regexpを文字列とした場合
s = "This is a pen. This is a box.";
alert( s.replace("This","That") ); // That is a pen. This is a box.
// regexpに gi フラッグをつけた場合
re = /apples/gi;
str = "Apples are round, and apples are juicy.";
newstr=str.replace(re, "oranges");
alert(newstr); // oranges are round, and oranges are juicy.
// 置換文字列で $x を使用した場合
ss = "The rain in Spain falls mainly in the plain.";
re = /(\S+)(\s+)(\S+)/g;
r = ss.replace(re, "$3$2$1");
alert( r ); // rain The Spain in mainly falls the in plain.
// 置換関数を第二引数値とした場合
function replaceFunc( substr, m1, pos, text )
{
return (((m1 - 32) * 5/9) + "C");
}
ss = "Water freezes at 32F and boils at 212F.";
re = /(\d+(\.\d*)?)F\b/g;
r = ss.replace( re, replaceFunc );
alert( r ); // Water freezes at 0C and boils at 100C.
正規表現に一致する最初の文字列の位置を取得
引数
regexp : RegExp | String
正規表現パターンおよびフラグを含む RegExpオブジェクトを指定します。文字列を指定することもできます。
regexp がRegExpオブジェクトでない場合は文字列に変換して、完全に一致する文字列の検索が実行されます。
返値
一致する文字列が見つかった場合、その位置を返します。位置は0~です。
一致する文字列が見つからなかった場合は、-1 を返します。
例
ss = "ABCDEFG";
// Match !
if (ss.search(/def/i) != -1) {
alert("Match");
}
// No match !
if (ss.search("def") != -1) {
alert("Match");
}
部分文字列取り出し
引数
start : Integer
取り出しを開始する、0 から始まるインデックス。
end : Integer
取り出しを終了する、0 から始まるインデックス。
省略された場合、slice メソッドは、文字列の最後までを取り出します。
返値
start から end の前の文字までを含む文字列を返します。
解説
start < 0 なら, (文字列長さ - start) とします。
end > 文字列長さ なら, end = 文字列長さとします。
end < 0 なら, end は (文字列長さ - end) とします。
start >= end なら, 空文字列を返します。
例
var anyString="abcdefgh"
// "abc"
print(anyString.slice(0,3));
// "efg"
print(anyString.slice(4,7));
// "efgh"
print(anyString.slice(4));
// "abcdefgh"
print(anyString.slice(0,10))
print(anyString.slice(0));
print(anyString.slice());
// "adef"
print(anyString.slice(3,-2));
文字列を区切り文字で分割
引数
separator : String
文字列を区切る 1 つまたは複数の文字を表す、
Regular Expression オブジェクトの文字列またはインスタンスを指定します。省略した場合、文字列全体を含む単一要素の配列が返されます。
limit : Number
配列に返される要素の数を制限する値を指定します。
返値
複数の文字列に分割された文字列を配列にを返します。
例
var s = "abcd efg h ijk";
var ans = s.split(" ");
// ans[0]:abcd ans[1]:efg ans[2]:h ans[3];ijk
参照
指定位置から文字列取り出し
引数
start : Integer
文字を取り出す位置( 0 から文字列の長さ以下までの整数)。
start が負の数である場合、substr はそれを文字列の最後から数えた文字のインデックスとして使用します。
length : Integer
取り出す文字の数。
返値
文字列内の、指定位置からの指定された長さを持つ部分を返します。
例
str = "abcdefghij"
print(str.substr(1,2)) // bc
print(str.substr(-2,2)) // ij
print(str.substr(1)) // bcdefghij
print(str.substr(1,20)) // bcdefghij
print(str.substr(20,2)) // ""
参照
部分文字列取り出し
引数
ia : Integer
0 と 文字列の長さから 1 引いた数の間にある整数。
ib : Integer
0 と文字列の長さの間にある整数。省略した場合、文字列の長さ。
返値
ia から ib 未満の文字を取り出します。
解説
ia==ib 等しい場合、 substring は空の文字列を返します。
ib が省略された場合、substring は文字列の最後までの文字を取り出します。
両方の引数が 0 未満、あるいは、 NaN だった場合、 それは 0 だったものとして扱われます。
両方の引数が stringName.length より大きかった場合、それは stringName.length だったものとして扱われます。
例
var anyString="abcdefgh"
// "abc"
print(anyString.substring(0,3));
print(anyString.substring(3,0));
// "efg"
print(anyString.substring(4,7));
print(anyString.substring(7,4));
// "abcdefg"
print(anyString.substring(0,7));
// "abcdefgh"
print(anyString.substring(0,8));
print(anyString.substring(0,10));
// "efgh"
print(anyString.substring(4));
参照
文字列内の文字を現在のロケールでの小文字に変換
返値
文字列内の文字を現在のロケールでの小文字に変換します。ほとんどの言語で、このメソッドは、toLowerCase と同じ結果を返します。
文字列内の文字を現在のロケールでの大文字に変換
返値
文字列内の文字を現在のロケールでの大文字に変換します。ほとんどの言語で、このメソッドは、toUpperCase と同じ結果を返します。
すべての英字を小文字に変換
返値
すべての英字を小文字に変換した文字列を返します。
例
var upperText="ALPHABET"
alert(upperText.toLowerCase()) // alphabet
参照
文字列オブジェクトを生成するソース
返値
文字列オブジェクトを生成するソース文字列を返します。
例
str = "abcdefghij"
alert( str.toSource() ); // (new String("abcdefghij"))
参照
文字列オブジェクト内の文字列を取得
返値
文字列オブジェクト内の文字列を返します。
例
str = "abcdefghij"
alert( str.toString() ); // abcdefghij
参照
すべての英字を大文字に変換
返値
すべての英字を大文字に変換した文字列を返します。
例
var lowerText="alphabet"
alert(upperText.toUpperCase()) // ALPHABET
参照
前後の空白文字を削除
返値
前後の空白文字を削除した文字列を返します。
参照
前の空白文字を削除
返値
前の空白文字を削除した文字列を返します。
参照
後の空白文字を削除
返値
後の空白文字を削除した文字列を返します。
参照
文字列オブジェクト内の文字列を取得
返値
文字列オブジェクト内の文字列を返します。
例
str = "abcdefghij"
alert( str.valueOf() ); // abcdefghij
参照
WeakMapは、オブジェクトをキーとするkey/valueマップを扱うクラスです。
WeakMapオブジェクトを作成
例
var wm1 = new WeakMap(),
wm2 = new WeakMap();
var o1 = {},
o2 = function(){},
o3 = window;
wm1.set(o1, 37);
wm1.set(o2, "azerty");
wm2.set(o1, o2); // a value can be anything, including an object or a function
wm2.set(o3, undefined);
wm2.set(wm1, wm2); // keys and values can be any objects. Even WeakMaps!
wm1.get(o2); // "azerty"
wm2.get(o2); // undefined, because there is no value for o2 on wm2
wm2.get(o3); // undefined, because that is the set value
wm1.has(o2); // true
wm2.has(o2); // false
wm2.has(o3); // true (even if the value itself is 'undefined')
wm1.has(o1); // true
wm1.delete(o1);
wm1.has(o1); // false
JavaScriptは large(64-bit)integerはサポートしてないため、64-bit integer をアクセスする 2つのdata typeを設けてます。
typeがTypeでなかったり、type.sizeがundefinedであった場合、lengthが配列のサイズとして不適切な場合、throwされます。
argType1... argTypeN : ctypes.CType
fields : Array [ { field1 : type1 }, ... ]
getの場合、JavaScriptとして等しい値を返します。ただし、JavaScript値へconvertできなかったら TypeErrorをthrowします。
setの場合、cdata の中身が cdata.constructor(v) で取り替えられてるようだ。
CDataFinalyzerオブジェクトにdispose()を実行させた後、CデータとC関数finalyzerが切り離されます。したがって、GC時にはFinalyzer(cdata)は実行されません。また、C関数の引数でcデータへの変換もされません。