Объясните пожалуйста приведение типов к number, string в js на основе нижеприведенного примера или где об этом можно подробно почитать на русском.
var a = {a:0,b:'',c:null,d:undefined,e:NaN,f:false,g:[],h:{}}
var b = ['a','b','c','d','e','f','g','h'];
function f(call){
for(var i = 0; i< b.length; i++){
if(call(b[i]) ){
console.log(b[i]);
}
}
}
f((key)=>a[key]);//gh
f((key)=>a[key]!=null);//все кроме cd
f((key)=>(++a[key]));//abcfg
после этого добавил больше значений
var a = {a:0,b:'',c:null,d:undefined,e:NaN,f:false,g:[],h:{},i:1,j:'one',k:[1],l:{a:true},m:[1,2],n:1e-6,o:0.9}
var b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'];
function f(call){
for(var i = 0; i< b.length; i++){
if(call(b[i]) ){
console.log(b[i]);
}
}
}
f((key)=>++a[key]);//все кроме dehjlm
f((key)=>a[key]+'');//все кроме bg
f((key)=>a[key]);//все кроме abcdef
f((key)=>a[key]!=null);//все кроме cd
Проверил это следующим выводом
f((key)=>{
console.log(`a[${key}]`+' => '+typeof(a[key])+`; ++a[${key}]`+' => '+(++a[key]));
return false;
});
f((key)=>{
console.log(`a[${key}]+''`+' => '+a[key]);
return false;
});
Из этого понял что:
- только [] при преобразовании к строке вернет '' , остальные вернут какие то символы;
- массив является объектом и любой объект в преобразовании к
boolэто всегдаtrue; - null==undefined;
- js не может привести к числу undefined,NaN,любой объект, не пустую строку и массив содержащий больше 1 элемента, а также массив содержащий строку;
хотелось бы почитать объяснение такого поведения интерпретатора на русском
если null==undefined, то почему null можно привести к числу, а undefined нет??