質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

JavaScriptの分類・言葉の定義について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 8
  • VIEW 1,599

score 10

最近耳にするようになったECMAScriptについてwikiなどでも調べたのですが、
言葉の定義・理解が漠然としており質問させていただきました。

「ECMAScript=JavaScriptの標準仕様」というのは分かったのですが、
下記について教えていただけると嬉しいです。

※私自身は非エンジニアで所謂エージェント業をしています
(出来るだけミスマッチの起きない理解が出来ればと思い質問させていただきました)

【質問】

1.ECMAScriptが標準仕様ということはそれ以外の仕様には何(名称)があるのか?

2.質問1の回答が「なし」であれば、基本的にはJavaScript=ECMAScriptと抑えても
問題ないのでしょうか??(厳密には違うと思うのですが凡その理解レベルでは)

3.質問2とも関係します。質問2がOKである前提の質問となりますが、
最近求人でES6の経験を問われるケースが増えているのですが、
凡そ下記理解で問題ないでしょうか。

・JavaScriptの世界にはECMAScriptという仕様がある
・ECMAScriptの中でもES5以前とES6以降で全然内容が異なる
・「JavaScriptが出来ます!」という人のスキルや対応範囲を判別するときは、
ES6について質問し、対応経験の有無を聞けば大別できる。

素人の質問ですいません!
ご教示いただけると嬉しいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+10

JavaScriptは各種ブラウザを作ってる各団体が、勝手にエンジンを搭載させるものです。
PHPやC言語みたいに共通のコンパイラが存在するわけじゃないんですね。
それってかなりまずくない?はいまずいです。
まぁECMAScript(以下ES)のお陰でほぼ挙動が統一されていますが、昔はやばかったですね。

IEはちょっと仕様の違うJScriptというモノを使っていましたし、
ActionScriptというFlash内で使われているスクリプト言語もES準拠です。

このECMAScriptとはなんぞや?

"str" == nullの結果はfalseであるべき。…みたいな事がつらつらと書かれている仕様書です。
配列のプロトタイプメソッドや正規表現の動作仕様なんかもバッチリ記載されており、
Chrome用に書かれたJavaScriptをFirefoxに持っていっても、寸分違わず同じ動作をするのはこの仕様のおかげです。

ここまでわかれば後はWikipediaで何とかなると思うんで、Wikipediaのリンクを貼り付けておきます。

https://ja.wikipedia.org/wiki/JavaScript
https://ja.wikipedia.org/wiki/ECMAScript


1.ECMAScriptが標準仕様ということはそれ以外の仕様には何(名称)があるのか?

「ない」と考えて良いでしょう。
1990年代後半の各社がバラバラに実装してるヤバイ状況のJSに号令かける為に作られたのがESです。

本当はJavaScriptにちなんだ名前にしたかったようですが、
何らかの問題があって、JavaScriptの仕様と一目で分かる名称を名乗れなかった経緯があります。
(この辺の詳細は忘れました)

2. 基本的にはJavaScript=ECMAScriptと抑えても問題ないのでしょうか?

ESが道路運送車両法、JSは実際に公道を走ってる車…という解釈がより正解に近いです。
電気自動車だろうが、ロータリーエンジン積もうが、タイヤ交換しようがなんでも良いわけです。
法律にさえ従えば公道走って良いですからね。

実際の世界では1台の車を指差して、「あっ、道路運送車両法だ!」と呼ぶ人間は居ません。
でも、車を見ながら「これが基準ギリギリ?道路運送車両法のここの基準は駄目だよなぁ」という発言はありえますね。
JS≒ESと同一視しているように見えますが、エンジニアは文脈でちゃんと使い分けています。

3-1. JavaScriptの世界にはECMAScriptという仕様がある

前述の通り、YES

3-2. ECMAScriptの中でもES5以前とES6以降で全然内容が異なる

これはNOです。
他のモノに例えるならば、新旧の「そ」というひらがなみたいな感じですかね。

// ES5まではこう書いてた
var add = function (a + b) {
  return a + b;
}
console.log(add(2, 4));
// Number: 6

// アロー関数を使って簡易的に書ける
var add = (a, b) => a + b;
console.log(add(2, 4));
// Number: 6

こういう新しく簡素で分かりやすい書き方や、便利関数が多数実装されたスーパーセットがES6です。
ES5でも自在に書ける人間がES6になって、簡単になった、全然別物、便利な世の中になったもんだ・・・とつぶやきますが、
基本的にはES6はスーパーセットなので、ES5完全準拠なJSコードもES6の世界で動作します。

だって当然じゃないですか。
昨日までWebサイトで動いていたES5準拠のコードが、ChromeがアップデートしてES6になったので動きません。
貴方の会社のホームページも動作しませんwww

こんなことになったら許せないでしょ?なので下位互換は残しています。
もちろんES5までに培ったテクニックやライブラリ等は全て使えます。

3-3. 「JavaScriptが出来ます!」という人のスキルや対応範囲を判別するときは、ES6について質問し、対応経験の有無を聞けば大別できる。

凄腕のフロントエンドエンジニアを名乗る人間に探りを入れる目的に使うのはありです。
一切ノータッチでJavaScriptが得意ですというのは今日日少々不自然ですからね。

でもまぁ、ES5準拠でもいくらでも素晴らしいコードは書けますので、
ES6にあまり詳しくないだけで弾くような潔癖な事はしないほうが良いかもしれません。

何故ならばIE11はES6のコードがほぼ動作しないからです。
これに対する対応策はいくつもあり、ES6で書いたコードをES5に変換してデプロイという手法がメジャーですが、
あえてES5準拠で書くようなアプローチを採用することも多いですからね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/25 14:21

    挙動の不一致や標準仕様になるまでの経緯、道路運送車両法と車など、
    非常に分かりやすく解説頂きありがとうございます!
    ネットで何時間も見ても解決しなかったことをこんなに丁寧に答えて頂き、
    感動しております…。

    キャンセル

  • 2018/01/25 15:37

    > ネットで何時間も見ても解決しなかった
    質問が良く練られているお陰ですね、
    お陰でこちらも何を求めているのか察しやすかったです。

    こういうフェイズで正しい方向へ思考を進めていく事はとても難しいので
    頑張った数時間が素晴らしい質問文に繋がったのだと思います。
    お疲れ様でした。

    キャンセル

+7

1.ECMAScriptが標準仕様ということはそれ以外の仕様には何(名称)があるのか?

ECMAScriptの仕様をベースにブラウザで動くように拡張されたものがブラウザで動くJavaScirpt。
サーバーで動くようにされたのがNodeということなのではないでしょうか。

ブラウザで動くって言っても、ブラウザってたくさんありますよね。
各ベンダーがそれぞれでJavaScriptが動くようにブラウザを実装しています。
じゃぁJavaScriptってどんなものなの?っとブラウザの開発者は思うので、
こういうものですと「最低限」規格化されたものがECMAScriptです。
だから、このブラウザでは動くけど、あのブラウザでは動かないという文法が
少なからず存在しました。最近はそういうのはなくなりつつありますが。

ECMAScriptのバージョンが上がると、ブラウザの実装者はその仕様を確認して、
新しい文法を使えるようにブラウザを実装します。

標準SQL規格にのっとるように、各ベンダーがSQLを実装してるようなものだと思います。
Oracle、SQLServer、PostgreSQL、MySQLなどRDBMSは様々ありますが、
上記のブラウザと同様に、製品それぞれで実装されているため
その製品でしか使えないような文法や機能もあります。
しかし標準SQLの部分はほぼ全部同じです。

基本的にはJavaScript=ECMAScriptと抑えても問題ないのでしょうか?

この時JavaScriptが何を指しているのか分からないため、問題ありそうです。
ブラウザなのかNodeなのかは大きく変わりますのでそこの確認は必要でしょう。
ECMAScriptの仕様を知っているだけでは、
ブラウザとNodeのどちらのJavaScriptも使えるとは言えません。
ブラウザにはブラウザ独自の、NodeにはNode独自の機能が存在するからです。

・JavaScriptの世界にはECMAScriptという仕様がある

そうです。

・ECMAScriptの中でもES5以前とES6以降で全然内容が異なる

ES6では色々できることが増えましたので、全然内容が異なるのはその通りです。
しかしES5の書き方でも動きますので、今までの知識は無駄ではありません。
積極的にES6を使って書けと言われれば、知らないと書けませんね。

・「JavaScriptが出来ます!」という人のスキルや対応範囲を判別するときは、
ES6について質問し、対応経験の有無を聞けば大別できる。

それは少し乱暴かもしれませんね。
前述した通り、ES5で書いたところで何ら問題なく動くのです。
ES5で壮大なものを作れる人を、ES6を知らないからといって「JavaScriptができない」
と判断するのはおかしいでしょうね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/25 14:19

    ブラウザとの関係性、ES5・6間での違いに加え、
    「ES6を使って書いてほしい」といわれた際にすぐに対応可能かどうか、
    といった当方の立場を考えて回答いただきありがとうございます!

    とても理解が進みましたm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る