成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)類型轉(zhuǎn)換,普通類型(原始對象)和對象的區(qū)別的一些知識點(diǎn)

y1chuan / 2879人閱讀

摘要:類型的和是,空字符串也是,所有的對象都是即使是空對象也是。六普通類型原始對象和包裝對象的轉(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

相關(guān)文章

  • 【面試篇】寒冬求職季之你必須要懂原生JS(上)

    摘要:只能遍歷數(shù)組,不能中斷,返回值是修改后的數(shù)組。這在語法上,稱為暫時(shí)性死區(qū)。作用域鏈無論是還是查詢,都會在當(dāng)前的作用域開始查找,如果沒有找到,就會向上級作用域繼續(xù)查找目標(biāo)標(biāo)識符,每次上升一個(gè)作用域,一直到全局作用域?yàn)橹埂? 互聯(lián)網(wǎng)寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原...

    寵來也 評論0 收藏0
  • 前端總結(jié)

    摘要:是一個(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)用,能夠...

    Jenny_Tong 評論0 收藏0
  • 前端總結(jié)

    摘要:是一個(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)用,能夠...

    bladefury 評論0 收藏0
  • 前端總結(jié)

    摘要:是一個(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)用,能夠...

    Zoom 評論0 收藏0
  • js面試題(上)

    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...

    leap_frog 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<