一、说一下js中类型转化的规则? 为false的值:false、undefined、NaN、‘’、0
// 说一下js中类型转化的规则?
// false的值
// false、undefined、null、''、0、NaN
// 其他值都为true
// ! 可以把这个值转化为boolean类型。
console.log(!'');
// 运算 +(字符串拼接的含义) - * / 1/true 1/'a'
console.log(1/'a');
// + 运算 字符串拼接
// 1) 数字和非字符串相加 Null相加0, undefined:数字和undefined相加 NaN
console.log(1+true);
console.log(1+null);
console.log(1+{}); //1[object Object]
//非数字相加
console.log(true+true);
console.log(true+{}); //如果有一方为字符串,就会认为是字符串拼接
// 对象中有2个方法:valueOf toString();
let obj={
[Symbol.toPrimitive](){
return 500;
},
valueOf(){
return {}; //返回的并不是一个原始类型
},
toString(){
return 200;
}
}
console.log(true+obj);
console.log({}.valueOf()); //返回的是 {}
// + - 这个符号 !
console.log(typeof +'a');
console.log(1+ +'123')
console.log((0.1+0.2)==0.3)
二、比较运算符 > = <
// 比较运算 >= <
console.log('a'.charCodeAt(0));
console.log('b'.charCodeAt(0));
console.log('a'<'bbb'); //ascii
console.log(1<'123'); // 如果可以转化成字符串,如果不能转化成数字,就返回false
// ==
console.log(null==undefined); //true
console.log(null===0); //false
// null 和undefined 和其他类型比较返回的都是false
console.log({}=={}); //返回的是引用空间
console.log(NaN==1); //NaN和任何类型比较都不相等。
console.log('1'==1); //将字符串转化成数字
console.log(1==true); //如果是boolean类型,会吧boolean转成数字
// 对象和字符串 数字 Symbol 比较的时候 会把当前的对象转化成原始类型
console.log({}=='[object Object]');
// [] ==![] 单目运算优先级更高
// []==false //false 是0,true是1
// []==0 [].valueOf()
// []==0 [].toString()
// ''==0 Number('');
// 0=0
// 相等
console.log([] ==![])