摘要:類型的和是,空字符串也是,所有的對象都是即使是空對象也是。六普通類型原始對象和包裝對象的轉(zhuǎn)換某些場合,原始類型的值會自動(dòng)當(dāng)作包裝對象調(diào)用,即調(diào)用包裝對象的屬性和方法。第三重新給變量賦值且值是對象類型,此時(shí)會在堆內(nèi)存保存的值。
一、數(shù)據(jù)類型轉(zhuǎn)換:
JS是一門動(dòng)態(tài)類型的語言,變量數(shù)據(jù)類型沒有限制,可以隨時(shí)賦值,但是運(yùn)算時(shí)是對數(shù)據(jù)類型有要求的,如果運(yùn)算類型不符,js會自動(dòng)強(qiáng)制轉(zhuǎn)換類型后再進(jìn)行計(jì)算。
"2"-1
"2"是string類型1是number類型,兩個(gè)數(shù)據(jù)類型不同,但是進(jìn)行了減法運(yùn)算,運(yùn)算前js會自動(dòng)嘗試將string類型轉(zhuǎn)為number類型后再進(jìn)行運(yùn)算。
二、任意值轉(zhuǎn)字符串:
js提供了以下API進(jìn)行轉(zhuǎn)換,String(?),?.toString()
var a0 = 0; var a1 =true; var a2 = undefined; var a3 = null; var a4 = {}; String(a0) "0" String(a1) "true" String(a2) "undefined" String(a3) "null" String(a4) "[object Object]" a0.toString() "0" a1.toString() "true" a2.toString() VM308:1 Uncaught TypeError: Cannot read property "toString" of undefined at:1:4 (anonymous) @ VM308:1 a3.toString() VM315:1 Uncaught TypeError: Cannot read property "toString" of null at :1:4 (anonymous) @ VM315:1 a4.toString() "[object Object]"
通過上述代碼可以發(fā)現(xiàn),null,和undefined可以用String但是不能用toString,因?yàn)樗麄儧]有toString()方法。
var a0 = 0 + ""; var a1 = true + ""; var a2 = undefined + ""; var a3 = null + ""; var a4 = {} + ""; undefined a0 "0" a1 "true" a2 "undefined" a3 "null" a4 "[object Object]"
也可以通過加一個(gè)空字符串來轉(zhuǎn)成字符串類型,該方法核心在于加號,加號如果發(fā)現(xiàn)左右兩邊任意有字符串,就會嘗試將另外一邊也轉(zhuǎn)成字符串。
三、任意值轉(zhuǎn)布爾值:
js提供了以下Boolean()方法進(jìn)行轉(zhuǎn)換,還可以通過!!取反兩次進(jìn)行轉(zhuǎn)換
var a0 = 0; var a1 = true; var a2 = undefined; var a3 = null; var a4 = {}; undefined Boolean(a0) false Boolean(a1) true Boolean(a2) false Boolean(a3) false Boolean(a4) true !!a0 false !!a1 true !!a2 false !!a3 false !!a4 true
所有的數(shù)據(jù)類型中,有5種特殊值是false。number類型的0和NaN是false,空字符串‘’也是false,所有的對象都是true即使是空對象也是。
5個(gè)falsy值
var a = 0 var a1 = NaN Boolean(a) false Boolean(a1) false var a2 = "" Boolean(a2) false var a3 = null Boolean(a3) false var a4 = undefined Boolean(a4) false
四、任意值轉(zhuǎn)數(shù)值:
js提供了以下API進(jìn)行轉(zhuǎn)換,
1、Number():
Number()方法會對字符串進(jìn)行轉(zhuǎn)換,如可以轉(zhuǎn)換成number類型則轉(zhuǎn)為對應(yīng)的數(shù)值,如果不能則返回NaN。
// 空字符串轉(zhuǎn)為0 Number("") // 0 // 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0 Number(true) // 1 Number(false) // 0 // undefined:轉(zhuǎn)成 NaN Number(undefined) // NaN // null:轉(zhuǎn)成0 Number(null) // 0 // 字符串:如果不可以被解析為數(shù)值,返回 NaN Number("324abc") // NaN
2、parseInt(string, radix),parseFloat(),parseFloat一般用來轉(zhuǎn)浮點(diǎn)數(shù)
string要被解析的值。如果參數(shù)不是一個(gè)字符串,則將其轉(zhuǎn)換為字符串(使用 ToString 抽象操作)。字符串開頭的空白符將會被忽略。radix一個(gè)介于2和36之間的整數(shù)(數(shù)學(xué)系統(tǒng)的基礎(chǔ)),表示上述字符串的基數(shù)。比如參數(shù)"10"表示使用我們通常使用的十進(jìn)制數(shù)值系統(tǒng)。始終指定此參數(shù)可以消除閱讀該代碼時(shí)的困惑并且保證轉(zhuǎn)換結(jié)果可預(yù)測。當(dāng)未指定基數(shù)時(shí),不同的實(shí)現(xiàn)會產(chǎn)生不同的結(jié)果,通常將值默認(rèn)為10。
Number()函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt()和parseFloat()函數(shù)嚴(yán)格很多。Number()只要有一個(gè)字符無法轉(zhuǎn)成數(shù)值,整個(gè)字符串就會被轉(zhuǎn)為NaN,而parseInt()和parseFloat()會嘗試將字符串前面的數(shù)字轉(zhuǎn)成數(shù)字。如果要轉(zhuǎn)的字符串第一位就無法轉(zhuǎn)換則返回NaN
var a = "123abc" Number(a)//字符串a(chǎn),Number直接返回NaN NaN parseInt(a,10)//字符串a(chǎn),parseInt則將字符串前面的123轉(zhuǎn)成數(shù)字 123 parseFloat(a) 123 var a = "abc123" parseInt(a,10) NaN parseFloat(a) NaN 除了使用parseInt(string, radix),parseFloat(),一般多使用【-0】和【+0】方法進(jìn)行轉(zhuǎn)換 "1"-0 1 "1.21"-0 1.21 "-1"-0 -1 "-1.21"-0 -1.21
五、普通類型和包裝對象:
1、所謂“包裝對象”,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的Number、String、Boolean三個(gè)原始對象。這三個(gè)原始對象可以把原始類型的值變成(包裝成)對象。
var a = new Number(123); var b = new String("abc"); var c = new Boolean(true); var a1 = 123; var b1 = "abc"; var c1 = true;
當(dāng)帶有new操作符時(shí),是當(dāng)作對象并且JS提供了一些方法,不帶new聲明是,值直接是存在棧內(nèi)存,帶new操作符時(shí)當(dāng)對象是存在堆內(nèi)存。通過下面代碼可以看到,通過new聲明提供了很多方法。
var a = "a" var b = new String("b") console.log(a) a console.log(b) String {"b"}....
六、普通類型(原始對象)和包裝對象的轉(zhuǎn)換:
某些場合,原始類型的值會自動(dòng)當(dāng)作包裝對象調(diào)用,即調(diào)用包裝對象的屬性和方法。這時(shí),JavaScript 引擎會自動(dòng)將原始類型的值轉(zhuǎn)為包裝對象實(shí)例,并在使用后立刻銷毀實(shí)
var a = "abc" //聲明一個(gè)普通字符串類型(原始對象),其本身并沒有l(wèi)ength屬性 a.length //調(diào)用a.length時(shí)JS引擎會自動(dòng)將var a = "abc"轉(zhuǎn)成var a = new String(a) 3 a.name = "zhang" "zhang" //a轉(zhuǎn)為包裝對象后加了一個(gè)name屬性 a.name //但是a.name卻返回undefined,這是因?yàn)樵碱愋偷闹缔D(zhuǎn)為包裝對象使用后立刻銷毀 undefined
七、關(guān)于內(nèi)存的一些知識點(diǎn):
在js普通(簡單)數(shù)據(jù)類型,存到棧內(nèi)存,復(fù)雜類型存到堆內(nèi)存,string兩者都可以存。
棧內(nèi)存和堆內(nèi)存數(shù)據(jù)組織形式不同。
示例解析:
第一:a是一個(gè)對象,棧內(nèi)存地址假設(shè)是addr1,值保存在堆內(nèi)存。
第二:聲明變量b等于變量a,則變量b也是一個(gè)對象,因?yàn)閎=a,所以棧內(nèi)存b的地址也
是addr1,并且堆內(nèi)存不會重復(fù)保存b的值。
第三:重新給變量b賦值且值是對象類型,此時(shí)會在堆內(nèi)存保存b的值。
結(jié)果:a.name返回的是a,因?yàn)閎第二次賦值時(shí)在堆內(nèi)存已經(jīng)保存了它的值,a和b在堆內(nèi)存有各自的值互不影響。
示例解析:
第一:a是一個(gè)對象,棧內(nèi)存地址假設(shè)是addr1,值保存在堆內(nèi)存。
第二:聲明變量b等于變量a,則變量b也是一個(gè)對象,因?yàn)閎=a,所以棧內(nèi)存b的地址也是addr1,堆內(nèi)存不重復(fù)保存b的值。
第三:變量a和b兩個(gè)棧內(nèi)存地址是相同的,都指向堆內(nèi)存的地址addr1,此時(shí)修改a.name或者b.name都會將堆內(nèi)存數(shù)據(jù)覆蓋。
結(jié)果:a.name返回的是b,因?yàn)閎.name已經(jīng)修改了堆內(nèi)存內(nèi)保存的數(shù)據(jù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104578.html
摘要:只能遍歷數(shù)組,不能中斷,返回值是修改后的數(shù)組。這在語法上,稱為暫時(shí)性死區(qū)。作用域鏈無論是還是查詢,都會在當(dāng)前的作用域開始查找,如果沒有找到,就會向上級作用域繼續(xù)查找目標(biāo)標(biāo)識符,每次上升一個(gè)作用域,一直到全局作用域?yàn)橹埂? 互聯(lián)網(wǎng)寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原...
摘要:是一個(gè)雙目運(yùn)算符內(nèi)部實(shí)現(xiàn)機(jī)制是通過原型鏈來判斷能自定義行為的東西三類型轉(zhuǎn)換轉(zhuǎn)除了其他所有值都轉(zhuǎn)為包括所有對象對象轉(zhuǎn)原始類型對象在轉(zhuǎn)換類型的時(shí)候,會調(diào)用內(nèi)置的函數(shù)該方法在轉(zhuǎn)原始類型時(shí)調(diào)用優(yōu)先級最高。 JS基礎(chǔ)知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數(shù)可以調(diào)用,能夠...
摘要:是一個(gè)雙目運(yùn)算符內(nèi)部實(shí)現(xiàn)機(jī)制是通過原型鏈來判斷能自定義行為的東西三類型轉(zhuǎn)換轉(zhuǎn)除了其他所有值都轉(zhuǎn)為包括所有對象對象轉(zhuǎn)原始類型對象在轉(zhuǎn)換類型的時(shí)候,會調(diào)用內(nèi)置的函數(shù)該方法在轉(zhuǎn)原始類型時(shí)調(diào)用優(yōu)先級最高。 JS基礎(chǔ)知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數(shù)可以調(diào)用,能夠...
摘要:是一個(gè)雙目運(yùn)算符內(nèi)部實(shí)現(xiàn)機(jī)制是通過原型鏈來判斷能自定義行為的東西三類型轉(zhuǎn)換轉(zhuǎn)除了其他所有值都轉(zhuǎn)為包括所有對象對象轉(zhuǎn)原始類型對象在轉(zhuǎn)換類型的時(shí)候,會調(diào)用內(nèi)置的函數(shù)該方法在轉(zhuǎn)原始類型時(shí)調(diào)用優(yōu)先級最高。 JS基礎(chǔ)知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數(shù)可以調(diào)用,能夠...
https://segmentfault.com/a/11... 原型 / 構(gòu)造函數(shù) / 實(shí)例 對原型的理解 我們知道在es6之前,js沒有類和繼承的概念,js是通過原型來實(shí)現(xiàn)繼承的。在js中一個(gè)構(gòu)造函數(shù)默認(rèn)自帶有一個(gè)prototype屬性, 這個(gè)的屬性值是一個(gè)對象,同時(shí)這個(gè)prototype對象自帶有一個(gè)constructor屬性,這個(gè)屬性指向這個(gè)構(gòu)造函數(shù),同時(shí)每一個(gè)實(shí)例 都有一個(gè)__proto...
閱讀 2243·2021-09-30 09:47
閱讀 1017·2021-08-27 13:01
閱讀 2984·2019-08-30 15:54
閱讀 3711·2019-08-30 15:53
閱讀 852·2019-08-29 14:07
閱讀 747·2019-08-28 18:16
閱讀 836·2019-08-26 18:37
閱讀 1443·2019-08-26 13:27