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
。
执行console.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
。
有没有人知道这里发生了什么?
P.S。:我无法向您展示整个代码;它是渲染代码的一部分,可以很好地利用这些值。
答案 0 :(得分:2)
这看起来像是console.log
的一个问题,它会显示对象的当前属性值,而不是记录对象时的属性值。在更改值的日志记录周围(之后)是否有任何代码?
console.log(new matrix4def().m00)
将记录0
,而不是非常接近零的负面信息。
答案 1 :(得分:0)
我怀疑您在运行完整脚本时遇到此问题(或者至少:在对对象的属性执行某些操作之后)。并且,鉴于您正在使用parseFloat
,我假设值可以是十进制(浮点)值。
如果是这种情况,你应该仔细研究JS和浮点数的已知问题:
either here
or here
maybe here, too
and last but not least: here
不要忘记查看最后一页提到的文章