勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Internet ExplorerでJavaScript関数の初期値について

   2024/02/25  JavaScript

あるJavaScriptの関数でchromeやfirefoxは正常に動いたけどIE11のみ動かないという現象が発生した。F12キーで開発者ツールからコンソールを確認しましたところ「')'がありません」との表示がされ、さらにその関数を動かすと「'関数名'は定義されていません。」と表示された。

 

症状

aタグリンクからonclickでtest_func関数を動かしたとする。ソースとしては以下のようなもの。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<a href="javascript:void(0);" onclick="return test_func(1)">test</a>

<script>
function test_func( score, flg = true ){
    if( flg ){
        alert(1);
    }
}
</script>

</body>
</html>

これをchromeやfirefoxではaタグを叩くと「1」のアラートが表示されるが、IE11では何も動作しなかった。コンソールを追うとページを開いた時点で「')'がありません」と表示、aタグを叩くと「test_funcは定義されていません。」と表示された。

 

原因

明確な原因は正直分からなかったんだけど、関数の初期値(デフォルト引数)がひっかかっているっぽい。初期値を設定せず、またonclickで関数を叩く際に引数をきちんと渡すと正常に動いた。以下のような形。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<a href="javascript:void(0);" onclick="return test_func(1, true)">test</a>

<script>
function test_func( score, flg ){
    if( flg ){
        alert(1);
    }
}
</script>

</body>
</html>

 

その他

JavaScriptでデフォルト引数を使うのは遠慮しておいた方が良さそう。使うとしても関数の中で「if(typeof param === 'undefined') param = デフォルト値;」とチェックして代入するような形で使うようにする。

 - JavaScript

  関連記事

HTMXで指定ページ内の指定要素を取得及び出力する方法サンプル

あるサイトのHTMLタグ内に「hx-〇〇」という見慣れないタグが記述されていた。 ...

JavaScriptでデータをGzip等で圧縮できる「pako」ライブラリの利用方法

以前「zcookies」というライブラリの利用方法をメモしたが、当該ライブラリの ...

jQueryプラグインのDateTimePickerで年月日と時間のピッカーを実装する方法

jQueryで年月日と時間を選択できるピッカーを導入したかった。以前にboots ...

CKEditor5(WYSIWYGエディタ)に画像アップロード機能を追加する方法

CKEditor5(ウィジウィグエディタ)に画像アップロード機能を追加したい。公 ...

バニラJS対応(jQuery非依存)の通知(トースト)系ライブラリ「Notyf」の利用方法

以前に通知(トースト)系ライブラリ「Toastr」の利用方法をメモしたが、こちら ...