0

SpiderMonkey と V8 JavaScript エンジンで奇妙な動作を見つけました。説明を見つけることは、誰にとっても良い学校になると提案する

奇妙な作業コード:

 var x = (new Date()).setHours(24, 0, 0, 0);
 typeof x; // "number"

期待どおりに動作するコード:

var x = new Date(); 
x.setHours(24, 0, 0, 0);
typeof x; // "object"
x instanceof Date; // true

理由が見つかれば、JavaScript がどのように機能するかがわかるでしょう。

4

2 に答える 2

2

MDNからsetHours は日付を設定し、1970 年 1 月 1 日 00:00:00 からのミリ秒数を返します。

そのため、最初の例では、x に数値である結果のタイムスタンプが割り当てられます。

よりよく説明するには、次のようにします。

var y = new Date(),
    x = y.setHours(24,0,0,0)

typeof x // number
于 2013-04-03T15:52:26.557 に答える
1

Date.setHours:

[...] 1970 年 1 月 1 日 00:00:00 UTC から、更新された Date インスタンスで表される時刻までのミリ秒数を返します。

最初のスニペットでは、xの値はタイムスタンプを表す数値であるため、そのタイプはnumberです。

var x = (new Date()).setHours(24, 0, 0, 0);
typeof x; // "number"

Date オブジェクトをインスタンス化し、それを呼び出しsetHoursて、に割り当てられたタイムスタンプを返しxます。


2 番目のスニペットの場合:

var x = new Date(); 
x.setHours(24, 0, 0, 0);
typeof x; // "object"

xDateオブジェクトであるため、これも予期される動作です。typeof演算子の可能な戻り値を見てください。

xは のインスタンスであり、コンストラクタのプロトタイプDateを継承するため、です。Datex instanceof Datetrue

于 2013-04-03T15:50:22.777 に答える