Javascriptの関数でデフォルト値は設定できますか?
下記の書き方ですと関数の呼出し側で、引数を省略した際
エラーになってしまいます。

test1(1,2);
test1(1,2,3);
test1(1,2,3,4);

function test1(a,b,c=1,d=1) {
alert (c);
alert (d);
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

JavaScriptでは、関数への引数の省略は問題なく行えますが、その際のデフォルト引数を設定する機能はありません。


ただ、引数が設定されなかった変数は「undefined」となっているので、それをチェックして自分で値を設定すれば、デフォルト引数の機能は実現できます。

function test1(a, b, c, d) {
  if (c == undefined) c = 1;
  if (d == undefined) d = 1;
  alert(c);
  alert(d);
}

こんなんで、どうでしょうか。
    • good
    • 0

JavaScript の関数では、デフォルト引数というものがありません。



こういったあたりも「 Java と JavaScript は全くの別物である」という一例ですね。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【確率統計】99%信頼区間に6個中、5個入ること?

Aが、Bと同等であることを示したいです。

A及びBは正規分布を示し、Bはμ=100、σ=1.0という前提です。

Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

測定結果が信頼区間から外れる確率は5%あるので、判定基準を5個中、5個としてしまうと厳しい判定だと思います。
そこで、6個中、5個が99%信頼区間に入ればAはBと同等と結論付けたいと思いますが、これでは判定が緩すぎると言われる不安があります。

測定のn数はこれ以上増やせません。
6個中、5個でOKとすることについて、どのように理論だてれば良いでしょうか?
また、1個は外れ値が出てもOKとすることを前提として、「6個中、5個が99%信頼区間に入る」の代案がありましたら、ご教示お願いいたします。

Aベストアンサー

> Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

99%信頼区間とありますが、母平均の信頼区間ではないですよね。
多分、Bの分布の99%を覆う区間のことを言っているのだと思いますが、それを信頼区間とは呼ばないでしょう。

さて本題ですが、もしAがBと同じ分布であるなら5個のデータがすべてBの99%区間に入る確率は0.99^5=0.95099なので、確かにほぼ有意水準5%の検定になります。
一方6個中5個以上とすると0.99^5*0.01*6+0.99^6=0.99854なので、有意水準0.146%の検定になります。
データ数が異なるので一概には言えませんが、有意水準を小さくとると検出力は悪くなるので、判定が緩すぎると言われる可能性がありますね。
でしたら、99%区間ではなくもう少し狭めて有意水準を5%となるようにしては如何でしょうか?
0.93715^5*(1-0.93715)*6+0.93715^6=0.95000

しかし、この方法ではAとBが同じ分布であるという検定にはなりませんね。
平均と分散が異なっていてもBの99%区間に入いる確率が99%である分布を考えてみてください。

もし、「A及びBは正規分布を示し、Bはμ=100、σ=1.0という前提」が確かならば、Aのデータから標本平均と標本分散を計算し、μ=100、σ=1.0かどうか検定した方が良いように思います。
このとき、個々の検定の有意水準は2.5%とします。
データ数は多い方が良いので5個よりは6個ですべきです。

あと付け加えると、同等性の検定について調べてみることをお勧めします。
簡単に説明すると、統計的仮説検定は同じであるということが基本的にはできません。
そこで、ある程度以上の違いを十分な検出力で検出できるように検定し、その結果有意でなければ、帰無仮説を支持しようというのが同等性の検定です。

> Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

99%信頼区間とありますが、母平均の信頼区間ではないですよね。
多分、Bの分布の99%を覆う区間のことを言っているのだと思いますが、それを信頼区間とは呼ばないでしょう。

さて本題ですが、もしAがBと同じ分布であるなら5個のデータがすべてBの99%区間に入る確率は0.99^5=0.95099なので、確かにほぼ有意水準5%の検定になります。
一方6個中5個以上とすると0.99^5*0.01*6+0.99^6=0.99854な...続きを読む

Qjavascript:(function(q, a, z) { q[a]("f")[z] = Ma

javascript:(function(q, a, z) { q[a]("f")[z] = Math.floor(Math.random()*999999);document.forms[0].submit(); })(document, "getElementById" ,"value");

このブックマークレットをsetIntervalで動かしたいのですがどう書き換えればいいのかよくわかりません。

調べたらstartfncやsetInterval(ここに何かを指定?,ミリ秒);を付ければ可能なことがわかったのですがうまくいきません。
初心者です。何卒宜しくお願いします

Aベストアンサー

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォームに乱数を設定しサブミットする)
 document.getElementById("f")..value = Math.floor(Math.random()*999999);
 document.forms[0].submit();


ところで、ご提示のスクリプトではフォームをサブミットするようになっていますが、通常はサブミットするとページが遷移してしまうので、setIntervalで繰り返すことは難しいはずです。
まぁ、target属性が設定されていたりすれば別ですけれど・・・
使い方がいまいちよくわかりませんが、文法的には
 setInterval( function(){
  ~~~
}, dalay);
とするか、
 setInterval(hoge, dalay);
 function hoge(){
  ~~~
 }
のようにすることで、実行が可能なはずです。(繰り返しできる環境であれば・・・)

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォ...続きを読む

Q白球5個、赤球2個、黒球3個の計10個を2組に分ける方法は何通りか

白球5個、赤球2個、黒球3個の計10個を2組に分ける方法は何通りか
まず、白球5個は(5,0)、(4,1)、(3,2)の3通りに分けられると考えました。
次に白球5個を(5、0)に分けた場合、赤球2個は(2,0)、(1,1)、(0,2)の3通り、黒球3個は(3,0)、(2.1)、(1,2)、(0,3)の4通りに分けられるので、計12通りに分けられると考えました。同様に、白球5個を(4,1)、(3,2)に分けた場合も赤球2個と黒球3個をそれぞれ計12通りに分けられるので、最終的に白球5個、赤球2個、黒球3個の計10個を36通りに分けられると考えました。
しかし、間違っているようです。どこか間違っているのか分かりません。アドバイスいただければと思います。よろしくお願い致します。

Aベストアンサー

10個と0個に分けた場合は2組に分けたとは言わないのでは?

答えは35通りではないですか。

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

Qコロッケ1個10円お一人様5個まで  何個買いますか?

「コロッケ1個10円お一人様5個まで」
みなさんは今晩のおかずなら何個買いますか?
何回も並んでたくさん買ったり、一緒に連れている子供を一人としてたくさん買いますか?

わたしは5個買っちゃいました。
明日の朝もこれでコロッケは決定です。

Aベストアンサー

そりゃ安い!早速並ばねば!!
7人家族に5個では喧嘩の元!
子どもにも並ばせて10個は最低ライン。
がんばって15個ゲットできたら翌朝コロッケサンドイッチに決定。
・・・たしか冷凍コロッケがあったはずだけど。

Qonmouseover="this.className=をjsファイルにまとめて、指定する場所はid=menu1,2~....かclass=menuで統一したい

<div class="font1 bor1"
onmouseover="this.className=this.className+' bgcol txcol'"
onmouseout="this.className='font1 bor1'">
というものがあったとしてこれを
<div id="menu1・・・2・・・">だけにして
onmouseover=~をjsに略記できるようにしたいのですが
何かいい手はありませんか?

idで指定できる版のほかに
classで指定できる版があるとうれしいです。classだと難しいでしょうか?

また、こちらももしできればでいいのですが、this.classNameを
指定IDのclassName等もできるのでしょうか?

質問に不足があれば答えられる範囲で答えます。よろしくお願いします。

Aベストアンサー

もうひとつ、質問内容を把握できてませんが、
jQueryを使ったサンプルを。中身は
「font1」ってclassを持つ要素のマウスオーバーで
bgcol と txcol の二つのクラスを追加する。
マウスアウトで
bgcol と txcol の二つのクラスを取り除く。
です。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function(){

$('.font1').hover(function(){
$(this).addClass("bgcol");
$(this).addClass("txcol");
},function(){
$(this).removeClass("bgcol");
$(this).removeClass("txcol");
});

});
</script>

$('.font1') という部分を $('#font1') と書けば id="font1" の要素に対する設定になります。 

jQueryの解説、入手先等は
http://www.openspc2.org/JavaScript/Ajax/jQuery_study/index.html
とか、参考にしてください。

もうひとつ、質問内容を把握できてませんが、
jQueryを使ったサンプルを。中身は
「font1」ってclassを持つ要素のマウスオーバーで
bgcol と txcol の二つのクラスを追加する。
マウスアウトで
bgcol と txcol の二つのクラスを取り除く。
です。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function(){

$('.font1').hover(function(){
$(this).addClass("bgcol");
$(this).addClass("txcol");
},function(){
$(this).removeClass("bgcol");...続きを読む

Q箱ティッシュはなぜ5個入り?

箱ティッシュはなぜ5個入りパックばかりなのでしょうか。

箱のサイズが最近は小さくなっています、にもかかわらず5個入りばかりですよね。
特に深い意味は無いのでしょうか。

Aベストアンサー

自信はない、・・・というか想像ですが、

箱ティッシュが1個でしか売っていないと、値段が高くなってしまいます。だから、複数個入りパックで売ることにしたのだと思います。だからといって、10個入りパックで売ると多すぎて家へ持って帰るときに邪魔になる・・・。
5個入りが値段も大きさもちょうどいい数なのでは?

Qtransform(-1, 0, 0, 1, 0,

HTML5 CANVASで
transform(-1, 0, 0, 1, 0, 0)
と書かれているコードがあるのですが、どういう意味でしょうか?

・特に第1引数が分かりません
・伸縮xが-1?

Aベストアンサー

引数は座標変換のマトリックスを表していますので、単純な伸縮率とはちょっと違うかと思いますが…
ご提示の引数は以下として処理されます。
 |-1 0 0|
 |0  1 0|
 |0  0 1|

結果的に、
 X'= -x
 Y'= y
に変換されることになりますので、Y軸に対する鏡像変換(ミラー)になるかと。

CANVASの解説は以下にありますのでご参考までに。
 http://www.html5.jp/canvas/ref.html
仕様書
 http://www.w3.org/TR/2dcontext/#transformations

Q5個の電球の明るさ

6V 2.4Wの電球を5個つなごうとしています。
電球1個ずつにスイッチを取り付けたいので、現在並列つなぎにしています。電球1個だけをつけたときの明るさ(電球にそのまま6Vの電圧をかけた時の明るさ)と、5個同時につけた時の電球1個あたりの明るさを同じにすることは出来るでしょうか?

Aベストアンサー

回答に対するお礼部分の質問に返答です。
その通りです。

 ACアダプターは絶縁物と銅線、鉄、金属めっき、といった、物を使い、電流が多少多く流れても、ほかの物質に変化しない物質で作られています。
但し、アダプターから電流を流し出してもらうには、何百キロメートルも離れた、発電所に頼らなければなりません。
 アダプターの中にも、必ず、電線の回路をまとめて
電気抵抗があります。アダプターに手を触れると、暖かいのは、その内部抵抗で発熱しているからです。

 しかし、化学変化に頼って内部で電圧と電流を作っている、しかも寿命のある(後ろの参考)、取り出す電流で、電池の内部抵抗が予測出来ない大きさで変化する乾電池と比較すると、ACアダプターの電線の内部抵抗の変化は、ほんのわづかで、計算もできますから、電圧降下の計算式はいつでも当てはまり、RxIボルト電圧降下して下がった電圧が出てきます。
ACアダプターに指定された範囲で使う限り、安定しています。範囲は、VAの値で見れます。(ボルトアンペアの数字で分かります)オーバーすると焼けてしまいます。

参考

★乾電池というのは、+電気を帯びた+イオン物質と-電気を帯びた物質(分子)2つの間で、電子が+イオンの方に流れていって結合中和して徐々に違った物質になってしまい、電流を流す電気を帯びた分子がなくなってしまう、と、電池の寿命です。
たいした意味がありませんが、こじつけると、電池が中和して、電流をだせなくなった時を、電池の内部抵抗が∞(むげんだい)オームになったといいます。

 電池の内部で化学変化を起こす物質の間で電子を流す原理(+と-に電球を接続した時流れます)、の電源ですから、化合してしまうと、化学変化が終わってしまうのです。
 自動車の鉛を使ったバッテリーの様に、中和して違う物質「酸化した鉛」になってしまって電流を流せない極板に変化したのを、外から、逆に強制的に電圧を加えて電流をバッテリーに流し込んでやると、中和していた電極は、分解されて元の電極に戻る電池もあります。元に戻す操作を●「充電」といっています。

 携帯用電動工具(ドリル)、デジカメ用電池は充電して再生可能な電池ですが、単一,単二、単三などは、再生できないでしょう?。
 電池は必ず直流電池です。携帯に絶対なくてはならないものです。必要なものです。

回答に対するお礼部分の質問に返答です。
その通りです。

 ACアダプターは絶縁物と銅線、鉄、金属めっき、といった、物を使い、電流が多少多く流れても、ほかの物質に変化しない物質で作られています。
但し、アダプターから電流を流し出してもらうには、何百キロメートルも離れた、発電所に頼らなければなりません。
 アダプターの中にも、必ず、電線の回路をまとめて
電気抵抗があります。アダプターに手を触れると、暖かいのは、その内部抵抗で発熱しているからです。

 しかし、化学変化に頼っ...続きを読む

Q1ページ内で複数のwindow.onload = functionの動作

Ajaxを使用して取得してきたRSSをinnerHTMLで表示するスクリプトを1ページ内に複数設置したいのですが、うまくいきません。
prototype.jsを使うと複数のonloadを制御できるという記事を参考にしたのですが、動作しませんでした。(WindowsIE6で検証してます)
http://hori-uchi.com/archives/2005_09.html

BODY以下のソースはこちらです。現状だとどちらか一つだけなら動作する感じです。これをどちらも動作する方法をご教授いただけませんでしょうか。宜しくお願いします。

//RSS取得1箇所目
<div id="p1">roading1</div><script>
window.onload = function(){
var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
u.type = "text/javascript";
u.charset = "utf-8";
u.src = "http://###";
}

var xml = {};
xml.onload = function(data){
var items1 = data.items;

var g = "\n";
for(var i = 0; i < Math.min(items1.length, 20); i++){
//
}

document.getElementById("p1").innerHTML = g;
}
</script>

//RSS取得2箇所目
<div id="p2">roading2</div><script>
window.onload = function(){
var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
u.type = "text/javascript";
u.charset = "utf-8";
u.src = "http://***";
}

var xml = {};
xml.onload = function(data){
var items2 = data.Result;

var h = "\n";
for(var i = 0; i < Math.min(items2.length, 20); i++){
//
}

document.getElementById("p2").innerHTML = h;
}
</script>

Ajaxを使用して取得してきたRSSをinnerHTMLで表示するスクリプトを1ページ内に複数設置したいのですが、うまくいきません。
prototype.jsを使うと複数のonloadを制御できるという記事を参考にしたのですが、動作しませんでした。(WindowsIE6で検証してます)
http://hori-uchi.com/archives/2005_09.html

BODY以下のソースはこちらです。現状だとどちらか一つだけなら動作する感じです。これをどちらも動作する方法をご教授いただけませんでしょうか。宜しくお願いします。

//RSS取得1箇所目
<div id="p...続きを読む

Aベストアンサー

window.onload にイベントハンドラを設定する方法でイベントを結びつける場合は、
window.onload=proc1;
window.onload=proc2;
のようにソースが読み込まれて、
当然後のもので、置き換えられてしまうので、
実際にonload イベントが起こってハンドラが呼ばれた時には、最後に設定したものが呼び出されると思います。
こういうイベントに複数のハンドラを割り当てるには、addEventListenerとかattachEvent (IEの場合はこちら)を使います。
prototype.js は、これらのブラウザによる違いを吸収してくれます。
(基本IEでも動作します)

質問文では、単にスクリプトタグによる呼び出しになろうかと思うので、
window.onload =function(){
}
を1つにしたらいいんじゃないかと思います。
問題点としては、同じ名前を使っていることですかね。
実際に試してないので見当違いなコメントだったらすみません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング