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;
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;
引数なしである限り、違いはありません。
Google Chromeで検証した限りでは表向きの動作は違いが無さそうですが、仕様を調査しきれなかったので違いがないとは断言できません。
特に、R1, R2
で RegExp.prototype.source
が (?:)
を返す挙動について調査しきれなかったので、ECMAScript仕様書を確認する事をお勧めします。
空の正規表現を指定しなければならない状況が私には思いつかず、調査する意義を見出せなかったのが正直なところです。
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
値 … グローバルオブジェクト@mashuel
Questioner
検証ありがとうございます
Thank you very much!
インスタンス生成時の初期値があるので、大雑把には違いは無いと思いますが、
どのような回答を期待されていますか?
「javascript array new array」
みたいな感じで検索すると、違いに関する情報が出てきますね。
上記の結果で言えば、以下のようなサイトが参考になりそうです
@mashuel
Questioner
なるほど。MDNだと他の記事も参考になりますね。今時のRegExpは奥が深い…
I translated this post by machine!
I hope this official link could help you.
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/Object
And the first line's code is just the grammatical sugar of the lines below.
The 2nd line and the 3rd line, the correspondings are equilevent.