一占调、Js方面的知識(shí)點(diǎn)
內(nèi)置類型
js中有7種內(nèi)置類型:分為兩大類型:
1、基本類型
基本類型:number移剪、string究珊、Boolean、undefined挂滓、null苦银、symbol
js中的數(shù)字類型都是浮點(diǎn)類型沒(méi)有整型。
例子:
Var a = 1.1
Var b = 2.2
Console.log(a+b) 結(jié)果為3.300000000003 這就是浮點(diǎn)型
解決浮點(diǎn)型的方法:
<script>
? ? ? ? let a = 1.1
? ? ? ? let b = 2.2
? ? ? ?var c = parseFloat(a)+parseFloat(b)?結(jié)果為3.300000000003
? ? ? ? 解決方法:
? ? ? ? var c = (parseFloat(a) + parseFloat(b)).toFixed(2)
? ? ? ? console.log(c);
? ? </script>
2赶站、對(duì)象
對(duì)象:object是引用類型幔虏,在使用過(guò)程中會(huì)遇到淺拷貝和深拷貝的問(wèn)題?
什么是淺拷貝什么是深拷貝贝椿?區(qū)別(在于是否真正獲取一個(gè)對(duì)象復(fù)制實(shí)體想括,而不是引用)
淺拷貝:只是增加了一個(gè)指針,指向已存在的內(nèi)存地址
方法:var newobject = $extend{(),oldobject}
深拷貝:增加了一個(gè)指針并且申請(qǐng)了一個(gè)新的內(nèi)存烙博,這個(gè)指針就指向這個(gè)新的內(nèi)存瑟蜈。
方法:var newobject = $extend{true,(),oldobject}
擴(kuò)展:
如果想獲得一個(gè)變量的正確類型可以使用:object.Prototype.toString.call()這樣就可以獲得[object type]的字符串
擴(kuò)展:
例子:Let? a ;打印a的結(jié)果為undefined渣窜,但undefined不是保留字铺根,在低版本會(huì)被賦值。如Let undefined = 1乔宿,使用上面就會(huì)打印出錯(cuò)位迂。
解決方法
a===void 0 結(jié)果為undefined
3、四則運(yùn)算
只有當(dāng)加法運(yùn)算時(shí)详瑞,其中一方為字符串類型掂林,就會(huì)把另外的一方轉(zhuǎn)換為字符串,其他的運(yùn)算只要其中一方是數(shù)字坝橡,那么另外一個(gè)就是數(shù)字泻帮。
例子:
Var a = 1
Var b = ‘5’
Var c = ‘3’
Alert(a+b-c) 結(jié)果為:12即15-3 = 12
[1,2]+[3,4]//結(jié)果為‘1,23计寇,4’
[] = [] 結(jié)果為false
原因:兩邊都為引用數(shù)據(jù)類型锣杂,==是直接比較兩邊的數(shù)據(jù),結(jié)果為false番宁。
因?yàn)閇]問(wèn)引用類型蹲堂,兩個(gè)[]分別指向不同的堆內(nèi)存,所以數(shù)據(jù)不同返回值為false贝淤。
[]==![] 結(jié)果為true
原因:
①:[]是對(duì)象柒竞,比較過(guò)程依靠=》Toprimitive([])==false比較,
②:toprimitive默認(rèn)調(diào)用的是toString這個(gè)方法播聪,于是toprimitive([])就等于一個(gè)空字符串
③:空字符串==false朽基,然后Tonumber(‘’)==0,即0==0离陶,結(jié)果為true
4稼虎、原型及原型鏈
每個(gè)函數(shù)都有一個(gè)prototype屬性,除了function.Prototype.bind(),改屬性指向原型招刨。
每個(gè)對(duì)象都有一個(gè)_proto_屬性霎俩,指向了創(chuàng)建該對(duì)象的構(gòu)造函數(shù)的原型
一直到object.prototype原型對(duì)象終止,原型鏈結(jié)束
5、new
新生成了一個(gè)對(duì)象
鏈接到原型
綁定 this
返回新對(duì)象