image.png

image.png

  1. var test1={
  2. toString(){
  3. return false;
  4. },
  5. valueOf(){
  6. return true;
  7. }
  8. }
  9. console.log(String(test1));//false
  10. console.log(String(test1.toString()));//false 走toString,不会走valueof
  11. console.log(String(test1.valueOf()));//true
  1. var test1={
  2. toString(){
  3. return [];
  4. },
  5. valueOf(){
  6. return '123';
  7. }
  8. }
  9. console.log(String(test1))//123 String()当toString返回引用值时,走valueof方法,与Number()相反

因为Number是求值,所以valueof为主,先走valueof
因为String是转换成字符串,所以以toString为主,先走toString

  1. var test1={
  2. // toString(){
  3. // return [];
  4. // },
  5. valueOf(){
  6. return '123';
  7. }
  8. }
  9. console.log(String(test1))//[object Object]
  10. console.log(test1.toString());//[object Object] 字符串
  1. console.log(String([1,2]));
  2. console.log(''+[1,2]);
  3. console.log(String({}));//[object Object]
  4. console.log({}.toString());
  5. console.log(Object.prototype.toString.call({}));
  6. console.log(Array.prototype.toString.call({}));//[object Object]
  7. console.log(''+{})
  1. function test(){
  2. console.log(1);
  3. }
  4. var test1 = new Function('console.log(1)');
  5. test1()
  6. // new Function()
  7. // Function.prototype.toString()//都是调用一个方法
  8. console.log(String(test));
  9. console.log(test.toString());
  10. console.log(Function.prototype.toString.call(test));
  11. //Function.prototype ->Object.prototype

image.png

  1. Number();//类型转换的工作
  2. new Number();//生成对象,包装类
  3. Date();
  4. new Date();//
  5. String();//
  6. new String();//
  7. Boolean();//
  8. new Boolean();//
  9. console.log(typeof Date());//string
  10. console.log(typeof new Date());//object

image.png

image.png
image.png
image.png

隐式类型转化

image.png
image.png

image.png

image.png

image.png
true转Number,’1’转Number

image.png
全是true

image.png
[1,2]用Number转换成NaN

  1. // console.log(null===null)
  2. // console.log(undefined===null)
  3. // console.log(NaN==NaN)
  4. //false 非数字是NaN,然后转换不了数字的都是NaN,两个不同字符串可能都是NaN所以不相等

image.png

  1. console.log([]==![])//true 0==0 true 取反优先级最高,
  2. console.log(Number([]))//0
  3. console.log(Array.prototype.toString.call([]))//''
  4. console.log(Number(Array.prototype.toString.call([])))//0
  5. console.log(Boolean([]))//true
  6. console.log(![])//false
  7. console.log(!Boolean([]))//false
  8. console.log(Number(false))//0

image.png
image.png
image.png

image.png

  1. console.log({}==!{})//!取反运算符先
  2. console.log({}=={})//引用值,对比地址
  3. console.log([]==[])//引用值对比地址 特殊对象

全是false

  1. console.log({}==!{})//!取反运算符先
  1. console.log([]==![])//true
  2. console.log([]===![])//false 最好用全等运算符