0

ログインページを確認しているときに、次のJSコードを見つけました

hexMD5('\232' + document.login.password.value + '\305\334\122\134\352');

それで、私は\352それが1バイトを占めるので、オーバーフローを引き起こし、その値を保持96するためにJavaスクリプトインタープリターが昇格するかどうかについて尋ねていますか?short

4

1 に答える 1

1

JavaScript には、bytes、shorts、integers* はありません。倍精度の IEEE-754 数値であるNumbertypeのみがあります。しかし、charCodeAtコード ポイント (大まかに言うと「文字」) を文字列で定義しているため、何かが文字列を使用してその中の文字の 1 つに対応するコード ポイントを取得しない限り、それは実際に示したコードには関係ありません。数字ではありません。JavaScript の文字は 16 ビット エンティティであるため、8 進エスケープ'\352'は文字 234 10 進数をエンコードします。これは明らかに、文字の 16 ビット範囲内に容易に収まります。

補足: 8 進数のエスケープは主要な標準の一部ではなく、strict モードでは許可されていません。それらは、仕様の非規範的な付属書の一部です。8 進エスケープではなく、16 進エスケープまたは Unicode エスケープを使用することをお勧めします。

* まあ、JavaScript には、 and演算子によって実行されるようなビット関連の計算中に、一時的なものとして 32 ビット整数があります。&|

于 2013-04-20T09:04:48.623 に答える