检查对象的类型和编号

时间:2014-12-09 00:00:10

标签: javascript

我有一段代码正在检查下面的condition,canyone告诉我为什么会想要跳过这个条件?

    var number = /^\d+$/;
    var type = Object.prototype.toString.call(obj);

    for(var key in obj) {
        if(type === '[object String]' && number.test(key)) {
           continue; //Why is this condition skipped
        }
       //some other code
    }

以下是我传递给object的示例function

{a: {someotherObject: {games: ['12']}}}

更新

上述条件何时满足,哪些会跳过?我感兴趣的是json如果通过,那条件是否匹配?。

2 个答案:

答案 0 :(得分:1)

该循环的想法是“传递”那些匹配if条件的条目(可能保持原样),并在遇到条目时采取一些操作(//some other code)那不符合这个条件。

答案 1 :(得分:1)

  

上述条件何时满足,

obj 是一个String对象并且 key 是一个像' 12'这样的值时,这是真的。在OP中, obj 是一个对象,因此测试在type === '[object String]'失败

  

它会跳过吗?

每当类型不是' [object String]' 或者密钥不仅仅是数字。将传递的值是类似于' 12'的字符串。或者' 12345'或者' 0'。

  

我感兴趣的是json如果通过,那条件会匹配吗?

我不知道这意味着什么。 : - (

如果 obj 是类似' 12'的值,那么在表达式中:

for (var key in obj)

obj 暂时转换为对象,就像new String(obj)一样(因为 obj 的类型是字符串,所以使用了String构造函数)。这个对象有两个"":' 0'和' 1'其属性为' 1'和' 2'分别。所以测试:

if (type === '[object String]' && number.test(key))

为true,因为该对象是String,其键是数字。没有非数字,可枚举的键,因此 continue 语句将意味着循环中没有任何反应。 e.g。

var obj = '12';
var type = Object.prototype.toString.call(obj); 
var number = /^\d+$/;

for (var key in obj) {

    // This will be true for both keys
    if (type === '[object String]' && number.test(key)) {
       console.log(key);   // 1, 2
       continue;
    }
   //some other code
}

如果 obj 不是字符串,那么"其他一些代码"将执行。