0

Google ChromeのJavascriptエンジンは、このプロトタイプの変数値に対して奇妙なことをします。

プロトタイプは次のように定義されます。

function matrix4def()
{
 this.m00=0;
 this.m01=0;
 this.m02=0;
 this.m03=0;
 this.m10=0;
 this.m11=0;
 this.m12=0;
 this.m13=0;
 this.m20=0;
 this.m21=0;
 this.m22=0;
 this.m23=0;
 this.m30=0;
 this.m31=0;
 this.m32=0;
 this.m33=0;
};

var value = new matrix4def();

console.log(value)私たちに見せて下さい:

 m00: 1
 m01: 0
 m02: 0
 m03: 0
 m10: 0
 m11: 1
 m12: 0
 m13: 0
 m20: 0
 m21: 0
 m22: 1
 m23: 0
 m30: 0
 m31: 0
 m32: 0
 m33: 1

使用中console.log(value.m00)に表示されます:-6.123031769111886e-17console.log(value); console.log(value.m00); console.log(value);実行すると、の最初の呼び出しと2番目の呼び出しに違いはありませんconsole.log(value);

実行console.log(typeof(value.m00))すると、次のように表示されます。number

やってみましたが、1も表示されませんでした...の値を一時的な値parseFloat(value.m00)に保存すると、私も表示されます。value.m00-6.123031769111886e-17

誰かがここで何が起こっているのか手がかりを持っていますか?

PS:コード全体を表示することはできません。これは、これらの値で多くのことを行うレンダリングコードの一部です。

4

2 に答える 2

2

console.logこれは、オブジェクトがログに記録されたときの値ではなく、オブジェクトの現在のプロパティ値を表示するの問題のようです。値を変更するロギングの前後 (後) にコードはありますか?

console.log(new matrix4def().m00)

ゼロに0非常に近い負のものではなく、ログに記録します。

于 2012-09-17T11:11:08.653 に答える
0

スクリプト全体を実行しているとき(または少なくとも、オブジェクトのプロパティに対していくつかの操作を実行した後)に、この問題が発生したと思われます。また、を使用していることを考えるとparseFloat、値は10進(浮動小数点)値である可能性があると想定しています。
その場合は、JSと浮動小数点数に関する既知の問題を詳しく調べる必要があります。

ここかここ

多分ここもここで
最後になりますが重要なことはここです

最後のページで参照されている記事を調べることを忘れないでください

于 2012-09-17T11:19:33.107 に答える