mashuel
@mashuel (恵瑠 真珠)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

newの有無、literalの違い

Q&A

Closed

JavaScriptで以下のような記述をします。各行でどんな違いが出ますか?

var A0=[], R0=/(?:)/, O0={}, F0=function(){};
var A1=Array(), R1=RegExp(), O1=Object(), F1=Function();
var A2=new Array, R2=new RegExp, O2=new Object, F2=new Function;
0

4Answer

[], Array(), new Array

引数なしである限り、違いはありません。

/(?:)/, RegExp(), new RegExp

Google Chromeで検証した限りでは表向きの動作は違いが無さそうですが、仕様を調査しきれなかったので違いがないとは断言できません。
特に、R1, R2RegExp.prototype.source(?:) を返す挙動について調査しきれなかったので、ECMAScript仕様書を確認する事をお勧めします。

空の正規表現を指定しなければならない状況が私には思いつかず、調査する意義を見出せなかったのが正直なところです。

function(){}, Function(), new Function

Function.protype.name の値が異なります。

'use strict';
var F0 = function(){}, F1 = Function(), F2 = new Function;

console.log(F0.name); // "F0"
console.log(F1.name); // "anonymous"
console.log(F2.name); // "anonymous"

挙動としては、関数コード内の this 値も異なります。
(今回のコードでは関数コードがない為、実質的な影響はありません)

  • function(){} の関数コード内の this 値 … 既定値
  • Function(), new Function の関数コード内の this 値 … グローバルオブジェクト
2Like

Comments

  1. @mashuel

    Questioner

    検証ありがとうございます

インスタンス生成時の初期値があるので、大雑把には違いは無いと思いますが、
どのような回答を期待されていますか?

0Like

Comments

  1. @mashuel

    Questioner

    違いがある事で不具合が出る可能性があれば知りたいと思っています。大袈裟なことをすれば速度にかなり差が出る事は確認できました

  2. @mashuel 解決したのであれば、クローズしてください。

「javascript array new array」

みたいな感じで検索すると、違いに関する情報が出てきますね。
上記の結果で言えば、以下のようなサイトが参考になりそうです

0Like

Comments

  1. @mashuel

    Questioner

    なるほど。MDNだと他の記事も参考になりますね。今時のRegExpは奥が深い…

Your answer might help someone💌