忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

JavaScript IE では関数のデフォルト引数が動作しない

最近はまったことですが IE(Internet Explorer) では関数のデフォルト引数が動作しないことです。
比較的規模の大きい PHP がらみのプログラムで IE では全く JavaScript の部分が動かなくなったのです。 非常にあせってしまって、何が原因かがよくわからなったのですが、どうもデフォルト引数の宣言の関数があると全ての JavaScript の関数が 動かなくなる様です。

IE 以外のブラウザでは JavaScript の関数の引数で =(イコール) を後ろに付けてデフォルト値を設定できます。 この関数を呼出す時に指定なしを記述できます。
例として以下のソースを見て下さい。 IE 以外のブラウザでは、それぞれのボタンをクリックした時にメッセージが表示されます。 しかし IE では、うんともすんとも何も実行されません。

■関数にデフォルト引数がある例

<html>
<head>
<meta charset="utf-8">
<title>test func</title>
<script type="text/javascript">
function doTest(msg = 'test message') {
    alert('Test:' + msg);
}
</script>
</head>
<body>
    <h2>test func</h2>
    <br />
    <button onclick="doTest();">Test</button><br />
    <button onclick="doTest('aaaa');">Test</button>
</body>
</html>


そこで、以下の様にデフォルト引数を止めてみました。
当然のことながら、IE でも関数が動作することが分かります。

■関数にデフォルト引数を止める

<html>
<head>
<meta charset="utf-8">
<title>test func</title>
<script type="text/javascript">
function doTest(msg) {
    alert('Test:' + msg);
}
</script>
</head>
<body>
    <h2>test func</h2>
    <br />
    <button onclick="doTest('test message');">Test</button><br />
    <button onclick="doTest('aaaa');">Test</button>
</body>
</html>

MDN docs ではちゃんと IE はデフォルト引数は実装されていないと載っていました。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Default_parameters


どうしてもデフォルト引数が必要な場合は以下の様にすれば動きます。

■無理やり関数にデフォルト引数

<html>
<head>
<meta charset="utf-8">
<title>test func</title>
<script type="text/javascript">
function doTest(msg) {
    if(typeof msg === 'undefined') {
        msg = 'test message';
    }
    alert('Test:' + msg);
}
</script>
</head>
<body>
    <h2>test func</h2>
    <br />
    <button onclick="doTest();">Test</button><br />
    <button onclick="doTest('aaaa');">Test</button>
</body>
</html>











PR

コメント

コメントを書く