はじめまして, 「つゆ」と申します。
Qiitaではじめての投稿となります。作法のなっていないところ、投稿内容について知識が不十分なところ多々あると思いますがどうぞよろしくお願いいたします。
#はじめに
本記事では、javascript 初学者である私が学習中に出会ったエラーの中で、個人的に気になったエラーが起こったので、そのエラーについて調べたことを書かせていただきます。
#開発環境
この記事ではwin10 HomeにインストールしたVS codeを使用。
htmlファイルの実行には、Google Cromeを使用。
#エラー内容
エラーが起こった経緯ですが、文字列に関する命令について学習している際、
'use strict'
const d = [2020, 06, 14];
console.log(d.join('/'));
とエディタに記述して実行したところ、ブラウザのConsoleにおいて以下のエラーメッセージが出力されました。
Uncaught SyntaxError: Octal literals are not allowed in strict mode.
ただ配列に記述した日付を'/'で区切って出力しようとしただけなのに謎のエラーが起こり戸惑いました(笑)。
とりあえずエラーメッセージを訳してみたところ、
「捉えられなかった SyntaxError。厳密なモードでは八進数リテラルは許可されません。」
なんのこっちゃいと思い、いろいろ調べてみたところ、どうやらjavascriptでは先頭に0がつく数値は8進数として処理されてしまうみたいです。つまり、今回私が配列の要素として'06'と指定しまったことが原因でエラーが起こってしまいました。
数値が8進数として処理されてしまうことの何が問題かというと、もし配列に'011'と代入したい場合(こんな場合があるか今の自分には分かりませんが..)、本当は10進数の 11 という数値を代入したかったにもかかわらずjavascript上では、代入された数値は'9'として処理されてしまいます。
#そんな時のために
ですが、上記のような本人の意図しない処理を防ぐために、javascriptを知る皆さんならよくご存知の、javascript内における厳密なエラーをチェックしてくれる
'use strict'
さんが活躍してくれます。 初学者故なんのためにコードの1列目に書いていたかちゃんと理解していませんでしたが、今回のような数値を扱うシチュエーションにおいて、Strictモードの宣言をしていなかった場合、処理が通ってしまい、エラーは発生していないが挙動がおかしくどこを直したらいいんだという状況になってしまうことがないよう、エラーを返してくれます。
#最後に
以上で、「JavaScriptでjoin()を使おうとして起こったエラーについて」を締めくくらせていただきます。はじめての投稿である上、javascriptの知識も不十分であるため、記事の内容について不正確なところが見受けられるかもしれませんが、どうかコメント等で精いっぱいのやさしさをもって指摘していただけると幸いです。
誤字脱字、文章構成(文のノリがうっとうしいなど)についても同様にご指摘下さると助かります。
最後となりますが、本記事を最後までお読みいただきありがとうございました。
##参考文献
-JavaScriptの数値型完全理解
-JavaScriptのStrict(厳格)モードまとめ | てらこや.work