当我从数组中获取值时,为什么会出现NaN(不是一个数字)错误?
当我从数组中获取值时,为什么会出现NaN(不是一个数字)错误?
我正在使用三角测量计算用户的位置。
如果我使用数组值,输出结果为NaN NaN
,但如果我硬编码值,它按预期正常工作,并输出以下结果:
从数组中获取值:
var beaconCoordinates = [[10,20], [200,300], [50,500]]; //从数组中获取值 var aX = parseInt(beaconCoordinates[0,0]); var aY = parseInt(beaconCoordinates[0,1]); var bX = parseInt(beaconCoordinates[1,0]); var bY = parseInt(beaconCoordinates[1,1]); var cX = parseInt(beaconCoordinates[2,0]); var cY = parseInt(beaconCoordinates[2,1]);
硬编码的值:
var aX = 2; var aY = 4; var bX = 5.5; var bY = 13; var cX = 11.5; var cY = 2;
以下是剩余的代码:
var dA = 5.7; var dB = 6.8; var dC = 6.4; //三边测量/三角测量公式 var S = parseInt((Math.pow(cX, 2.) - Math.pow(bX, 2.) + Math.pow(cY, 2.) - Math.pow(bY, 2.) + Math.pow(dB, 2.) - Math.pow(dC, 2.)) / 2.0); var T = parseInt((Math.pow(aX, 2.) - Math.pow(bX, 2.) + Math.pow(aY, 2.) - Math.pow(bY, 2.) + Math.pow(dB, 2.) - Math.pow(dA, 2.)) / 2.0); var y = ((T * (bX - cX)) - (S * (bX - aX))) / (((aY - bY) * (bX - cX)) - ((cY - bY) * (bX - aX))); var x = ((y * (aY - bY)) - T) / (bX - aX); //用户的x和y位置 console.log(x,y);
有人能解释一下这个吗?我很困惑。
问题的原因是代码中尝试访问一个值arr[0,0],而实际上应该使用arr[0][0]来获取一个值。解决方法是逐个获取数组中的值,如下所示:
var beaconCoordinates = [[10,20], [200,300], [50,500]]; //从数组中获取值 var aX = parseInt(beaconCoordinates[0][0]); var aY = parseInt(beaconCoordinates[0][1]); var bX = parseInt(beaconCoordinates[1][0]); var bY = parseInt(beaconCoordinates[1][1]); var cX = parseInt(beaconCoordinates[2][0]); var cY = parseInt(beaconCoordinates[2][1]); console.log(cY);
另外,如果使用`parseInt`函数,还应该传递一个基数参数(radix parameter),以指定要解析的数字的进制。详情请参考以下链接:
- [为什么我们需要使用基数参数?](https://stackoverflow.com/questions/6611824)
- [parseInt函数的使用文档](http://www.w3schools.com/jsref/jsref_parseint.asp)