需要几个javascript问题的答案?

时间:2012-06-04 12:40:28

标签: javascript

https://stackoverflow.com/questions/1684917/what-questions-should-a-javascript-programmer-be-able-to-answer

我对这里发布的问题几乎没有答案?。

我正在迭代我定义的这个数组,里面有3个元素..数字1 2和3 ..为什么地球上出现杰克?

Object.prototype.jack = {};

var a = [1,2,3];

for ( var number in a ) {
    alert( number )
}

当我将jack变量声明为'Jack'时,为什么它会提示未定义?

<script>
    (function() {
        var jack = 'Jack';
    })();
    alert(typeof jack)
</script>

为什么说对象而不是数组?我如何检测它是否是一个数组?

array = [1,2]; alert( typeof array )

我有两个字符串,但第二个评估不成立。这是一个潜在的错误吗?怎么回事呢?

alert( [typeof 'hi' === 'string', typeof new String('hi') === 'string' ]  )

2 个答案:

答案 0 :(得分:3)

对于第一个问题,JavaScript中的for-in构造旨在迭代对象属性。由于您已将jack添加到所有对象的原型中,因此会显示该对象。在JavaScript中迭代数组的正确方法是使用增量for循环

for (var i=0; i<a.length; i++) {
  console.log(a[i]);
}

对于第二个问题,您在匿名函数的范围内声明了var jack。外面的警报并不为人所知。

// Declare outside.
var jack;
(function() {
    jack = 'Jack';
})();
alert(typeof jack);

答案 1 :(得分:0)

  1. 因为您不应该使用in来迭代数组,这会覆盖对象属性(并从Object.prototype通过链获取“jack”)。使用for循环代替.length
  2. 因为它是在不同范围内宣布的。
  3. 因为它是Array原型的对象。使用instanceof
  4. 因为typeof任何对象,再一次是“对象”。