for-in
loops should include an if
statement JS-0051 957 delete attrs['aria-selected'];
958 }
959
960 for (var attr in attrs) { 961 var val = attrs[attr]; 962 963 option.setAttribute(attr, val); 964 } 965
966 if (data.children) {
967 var $option = $(option);
658 };
659
660 Utils._convertData = function (data) {
661 for (var originalKey in data) { 662 var keys = originalKey.split('-'); 663 664 var dataLevel = data; 665 666 if (keys.length === 1) { 667 continue; 668 } 669 670 for (var k = 0; k < keys.length; k++) { 671 var key = keys[k]; 672 673 // Lowercase the first letter 674 // By default, dash-separated becomes camelCase 675 key = key.substring(0, 1).toLowerCase() + key.substring(1); 676 677 if (!(key in dataLevel)) { 678 dataLevel[key] = {}; 679 } 680 681 if (k == keys.length - 1) { 682 dataLevel[key] = data[originalKey]; 683 } 684 685 dataLevel = dataLevel[key]; 686 } 687 688 delete data[originalKey]; 689 } 690
691 return data;
692 };
510
511 var methods = [];
512
513 for (var methodName in proto) { 514 var m = proto[methodName]; 515 516 if (typeof m !== 'function') { 517 continue; 518 } 519 520 if (methodName === 'constructor') { 521 continue; 522 } 523 524 methods.push(methodName); 525 } 526
527 return methods;
528 }
957 delete attrs['aria-selected'];
958 }
959
960 for (var attr in attrs) { 961 var val = attrs[attr]; 962 963 option.setAttribute(attr, val); 964 } 965
966 if (data.children) {
967 var $option = $(option);
658 };
659
660 Utils._convertData = function (data) {
661 for (var originalKey in data) { 662 var keys = originalKey.split('-'); 663 664 var dataLevel = data; 665 666 if (keys.length === 1) { 667 continue; 668 } 669 670 for (var k = 0; k < keys.length; k++) { 671 var key = keys[k]; 672 673 // Lowercase the first letter 674 // By default, dash-separated becomes camelCase 675 key = key.substring(0, 1).toLowerCase() + key.substring(1); 676 677 if (!(key in dataLevel)) { 678 dataLevel[key] = {}; 679 } 680 681 if (k == keys.length - 1) { 682 dataLevel[key] = data[originalKey]; 683 } 684 685 dataLevel = dataLevel[key]; 686 } 687 688 delete data[originalKey]; 689 } 690
691 return data;
692 };
Looping over objects with a for in
loop will include properties that are inherited through the prototype chain.
This behavior can lead to unexpected keys in your for loop.
for (const key in foo) {
doSomething(key);
}
for (const key in foo) {
if (Object.prototype.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
for (const key of Object.keys(foo)) {
doSomething(key);
}