私はjqueryプラグインを読んでいて、この興味深い構文を見つけました:
'sth'+ +new Date
作成者が一意の ID に使用した数値文字列を作成します。sth1237004731731
どんな構文なのか気になるのですが、それについての読み物があれば教えてください。ありがとう!
私はjqueryプラグインを読んでいて、この興味深い構文を見つけました:
'sth'+ +new Date
作成者が一意の ID に使用した数値文字列を作成します。sth1237004731731
どんな構文なのか気になるのですが、それについての読み物があれば教えてください。ありがとう!
JavaScript の型強制のいくつかの副作用を使用して、(おそらく要素の) 一意の識別子を作成しています。紛らわしい部分は+new Date
. ここで、new Date
(またはnew Date()
) はオブジェクトを返しDate
ます。+
しかし、これの前に aまたは aを置くと-
、JS インタープリターはこの値を強制的にNumber
オブジェクトに強制し、JS が行う方法はDate
>Number
タイムスタンプ (またはgetTime()
) を返すことです。
したがって、このコードは次のように別の方法で表現できます。
var date = new Date(), // "Mon May 14 2012 10:03:58 GMT-0400 (EST)"
timestamp = date.getTime(), // 1337004238612
identifierString = "sth" + timestamp.toString();
そんなに冗長にする必要はないと合理的に主張するかもしれないので、個人的にはおそらくこれを次のように書いたでしょう:
var identifier = "sth" + (new Date()).getTime();
ただし、誰かがあなたのコードを保守する必要があると予想される場合は、あなたの例のようなコーディングは避けてください。それがあなたの足を止めたなら、それはおそらく多くの人々を止めるでしょう. コーディング スタイルとは、単にインタプリタに意図を表現することではなく、人間の開発者に意図を表現することです。経験豊富な開発者の頭の中でコードがブラウザーで機能しても、構文エラーで失敗する場合は、単純明快で間違っています。
これは、単項演算子の興味深い使い方です+
。基本的に、この式を 3 つの部分に分解し、2 項+
演算子で分割できます。
"sth"
、そして+
、そして+new Date
。
バイナリの最初のオペランド+
は単なる一般的な文字列リテラルです。2 番目のオペランドは単項+
演算子を使用します。これは、リンクされた標準状態として、そのオペランドを に変換しNumber
ます。
new
演算子は優先順位が最も高いため、 unary よりも「強くバインド」されます。これは、最初に評価されること+
を意味します。new Date
したがって、単項のオペランドは+
、式の結果ですnew Date
。もちろん、new Date
単に空のDate
オブジェクトを作成します。§ 15.9.3.3 new Date() に従って:
新しく構築されたオブジェクトの [[PrimitiveValue]] 内部プロパティは、現在の時刻を識別する時刻値 (UTC) に設定されます。
つまり、 aは現在の時刻を表すオブジェクトnew Date
になります。Date
次に、+new Date
空白のDate
オブジェクトを数値に変換します。
仕様は長く、従うのは難しいです。つまり+new Date
、現在の時刻に関連付けられた UNIX タイムスタンプを返します。
仕様に従う長い答えは、評価されたオペランドである単項+
呼び出しです。は単純に を返すので、式は になります。ToNumber(GetValue(expr))
expr
GetValue(dateObj)
dateObj
ToNumber(dateObj)
の結果はToNumber
、引数の型によって異なります。オブジェクトの場合は を返しますToNumber(ToPrimitive(input argument, hint Number))
。
ToPrimitive
次に、 objectのvalueOf
プロパティをDate
呼び出します。これはNumber
、オブジェクトに関連付けられた時間値ですDate
。ついに、私たちが探していたものです! 次に、チェーンを上に戻ります。ToNumber(num)
単純に を返しますnum
。
もちろん、そこから文字列"sth"
と の結果+new Date
が連結され (必要に応じて仕様で見つけることができます)、探していた結果が得られます。