我有一段代码正在检查下面的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如果通过,那条件是否匹配?。
答案 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 不是字符串,那么"其他一些代码"将执行。