Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在插入1后,数组中字典中的数字如何可以直接为NaN?_Javascript - Fatal编程技术网

Javascript 在插入1后,数组中字典中的数字如何可以直接为NaN?

Javascript 在插入1后,数组中字典中的数字如何可以直接为NaN?,javascript,Javascript,我有一段代码,其中包括: var clusterCenters = [{"x": 1,"y": 1},{"x": 10,"y": 10}]; console.log(clusterCenters); 在Chrome 26中: 在Firefox21中: 为什么会发生此错误? 我猜错误应该在下面的函数中 function getKMeansInfo(k, mouseX, mouseY) { // choose cluster centers var clusterCenters

我有一段代码,其中包括:

var clusterCenters = [{"x": 1,"y": 1},{"x": 10,"y": 10}];
console.log(clusterCenters);
在Chrome 26中:

在Firefox21中:

为什么会发生此错误?

我猜错误应该在下面的函数中

function getKMeansInfo(k, mouseX, mouseY) {
    // choose cluster centers
    var clusterCenters = [{"x": 1,"y": 1},{"x": 10,"y": 10}];
    console.log(clusterCenters);

    for (iteration=0;iteration< 20;iteration++) {
        // for each object, check which cluster is nearest
        for (i=0; i<points.length; i++) {
            var distMin = 1000000;
            var clusterMin = 0;
            for(j=0; j<k; j++) {
                var dist = euklideanDist(clusterCenters[j], points[i]);
                if (dist < distMin) {
                    distMin = dist;
                    clusterMin = j
                }
            }
            points[i]["cluster"] = clusterMin;
        }

        // calculate center of cluster
        var clusterSum = new Array(k);
        for (i=0; i<k; i++) {
            clusterSum[i] = {"x":0, "y":0, "n":0};
        }
        for (i=0; i<points.length; i++) {
            clusterSum[points[i]["cluster"]]["x"] += points[i]["cluster"]["x"];
            clusterSum[points[i]["cluster"]]["y"] += points[i]["cluster"]["y"];
            clusterSum[points[i]["cluster"]]["n"] += 1;
        }
        for (i=0; i<k; i++) {
            if (clusterSum[i]["n"] > 0) {
                clusterCenters[i] = {
                    "x":clusterSum[i]["x"]/clusterSum[i]["n"],
                    "y":clusterSum[i]["y"]/clusterSum[i]["n"]};
            }
        }
    }

    return {"cluster":1, "radius":10};
}
函数getKMeansInfo(k、mouseX、mouseY){ //选择群集中心 var-clusterCenters=[{“x”:1,“y”:1},{“x”:10,“y”:10}]; 控制台日志(集群中心); 对于(迭代=0;迭代<20;迭代++){ //对于每个对象,检查最近的簇
对于前面提到的(i=0;i),控制台日志记录可能很棘手。尤其是Chrome,它以实时格式显示单值对象

如果要多次记录以查看对象的演变,请使用以下命令:

 console.log (JSON.stringify (obj));
这将确保您在执行console.log时看到值。这确实依赖于
JSON.stringify
,对于复杂的递归对象将失败,因此这对DOM对象没有帮助

调试JavaScript 当您想要调试JavaScript时,您可以使用Firefox和Firebug,也可以使用Chrome及其内置开发工具。您可以使用Ctrl+Shift+I打开它们。它们如下所示:


使用开发人员工具,您可以设置断点,这使得调试更加容易。

console.log
实现有时是“活动”的。它们不一定表示对象被记录时的状态,而是表示对象的“当前状态”。您可以查看所有更改
clusterCenters
的代码,尤其是您分割值的最后一个循环。那里必须有一个非数字值。我的代码中的错误出现在
点[i][“cluster”][“x”
。它应该是
点[i][“x”]
。所以我尝试访问一个字典,尽管它是一个似乎导致NaN的数字。我通过使用Chromes developer tools发现了这个错误。我可以用屏幕截图向developer tools添加提示吗?