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-17. Doingconsole.log(value); console.log(value.m00); console.log(value);的第一次和第二次调用没有区别console.log(value);

console.log(typeof(value.m00))会告诉我们:number

我试过做parseFloat(value.m00),但也没有显示 1... 将值存储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,我假设这些值可以是十进制(浮点)值。
如果是这种情况,您应该仔细查看 JS 和浮点数的已知问题:

要么在这里,要么在
这里
,也可能在这里,
最后但并非最不重要:这里

不要忘记查看最后一页提到的文章

于 2012-09-17T11:19:33.107 回答