繁体   English   中英

我的JavaScript代码有什么问题?

[英]What's wrong in my JavaScript code?

我无法弄清楚出了什么问题。

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {
    this.passengers = passengers;
    this.maxLoad = maxLoad;
    this.wheels = wheels;
    this.doors = doors;
    this.maxSpeed = maxSpeed;
};
var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h");
var output = new Array();
for (var i = 0; i < ferrari.length; i++) {
    for (var a in ferrari) {
        output[i] = a;
    }
}
document.getElementById('ELEMENTHERE').innerHTML = (output.join(" "));
for (var i = 0; i < ferrari.length; i++) {

ferrari不是一个阵列,但你试图像它一样访问它。 拆下它及其相应的端部支撑。

你也应该改变output[i] = ...; to output.push(...); output[output.length] = ...; ,这将消除手动增加i需要。

从我所看到的,你for...in被遍历同一个对象,外for是。 如果ferrari有一个长度,这将把每个output项设置为ferrari的最后一个键 - 如果没有,则将错误提供给未定义的属性。

您可能想要做的事情:

for (var a in ferrari) {
    output[output.length] = a; // or ferrari[a] if you wanted values, not keys
}

并完全摆脱外部for循环。

for (var i in ferrari) output.push(ferrari[i]);

这样做会更健壮:

for (var i in ferrari)
  if (ferrari.hasOwnProperty(i))
    output.push(ferrari[i]);

你的意思是

i = 0;
for (var a in ferrari) {
    output[i++] = a;
}

法拉利没有长度属性。

ferrai是一个Object,它没有按名称长度的属性(数组有)。 将您的代码更改为:

<script type="text/javascript">
        var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {     
            this.passengers = passengers;     
            this.maxLoad = maxLoad;     
            this.wheels = wheels;     
            this.doors = doors;     
            this.maxSpeed = maxSpeed; 
        }; 
        var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h"); 
        var output = new Array(); 
        var i=0;
            for (var a in ferrari) 
            {
                output[i] = a;     
                i++;
            } 
        document.getElementById('ELEMENTHERE').innerHTML = (output.join(" "));
  </script>

为什么不直接覆盖对象的toString()?

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {
  this.passengers = passengers;
  this.maxLoad = maxLoad;
  this.wheels = wheels;
  this.doors = doors;
  this.maxSpeed = maxSpeed;
  this.toString = function() {
    return this.passengers + " " + this.maxLoad + " " + this.wheels + " " + this.doors + " " + this.maxSpeed;
  };
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM