1.js中的数据类型:

(1)js中的原始基本数据类型:String,Number,undefined,null,symbol(ES6),Boolean
(2)js中的对象类型:Object

2.js中的数据类型转换:

(1)首先是字符串类型转换:
使用String()方法:
String(str)=>str
String(123)=>'123'
String(undefinded)=>'undefined'
String(false/true)=>'false/true'
string(null)=>'null'
String方法内部调用过程:首先调用该实例的toString()方法,
如果返回的是原始类型的值那么就直接返回该值,不再进行后续的调
用,如果返回的是复合类型那么在调用该实例的valueOf方法,同
理如果valueOf返回的是原始类型的值,那么就直接返回该值,不
再进行后续调用,如果返回的是复合类型就报错;
eg:let a={
  detail:1,
  toString:function(){
    return {}
  },
  valueOf:function(){
    return {}
  }
}
console.log(String(a))
该程序会报错;
(2)其次是数字类型转换:
使用Number()方法:
Number(123)=>123
Number('123')=>123
Number('123abc')=>NaN
Number('false')=>0
Number('true')=>1
Number(null)=>0
Number(undefinded)=>NaN
Number('')=>0
Number({})=>NaN
Number方法的内部调用过程:首先调用该实例的valueOf()方法,
如果返回的是原始类型的值那么就直接返回该值,不再进行后续
的调用,如果返回的是复合类型那么在调用该实例的toString()方法,
同理如果返回的是原始类型的值,那么就直接返回该值,不再进行后
续调用,如果返回的是复合类型就报错;
let a={
  detail:1,
  toString:function(){
    return '123'
  },
  valueOf:function(){
    return {}
  }
}
console.log(Number(a))
该程序返回的是123
(3)最后是布尔类型转换:
采用Boolean()方法:
除:
Boolean('')=>false
Boolean(0)=>false
Boolean(NaN)=>false
Boolean(undefined)=>false
Boolean(null)=>false
注:undefined==null//返回的true
其余返回结果都是true
(4)判断语句,加减运算,native(console.log())之类会发生隐式类型转换
(5)关于if判断中'=='和'==='之间的区别
首先if判断的本质是truly和falsely变量的判断:
truly === !!true,  falsely === !!false
除 Boolean()方法等于false的为falsely变量,其余都为truely变量

'==='表示绝对相等;
'=='在判断的过程中会发生类型转换从而尽量让两个变量相等,除判断变量等于undefined的时候
此时if(a==null)等价与if(a===null||a===undefinded)

3.js的运算符注明以及一些加号运算

(1)~:直接按位取反(加1取相反数)
(2)^:进行异或操作(同为0,不同为1)
(3)&:进行与操作
(4)|:进行同或操作
(5)[]+{}=>"[object Object]" //[]会被强制转换为'',{}会被强制转换为"[object Object]" 
    []+[]=>''
    {}+[]=>0//{}空代码块,+[]转义为0
    {}+{}=>"[object Object][object Object]"
    true+true=>2
   1+{a:1}=>"1[object Object]"

4.js中的值类型和引用类型

值类型一般有undefined,number,string,symbol,boolean
引用类型一般有数组和对象类型,还有null(指向空指针)

其中值类型和引用类型的主要区别是值类型的value指向的就是
当前的这个值,而引用类型的value一般指向的是一个内存地址