一、說一下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([] ==![])