欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

javascript有多少中數(shù)據(jù)類型轉(zhuǎn)換

這篇文章給大家分享的是有關(guān)javascript有多少中數(shù)據(jù)類型轉(zhuǎn)換的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、如皋網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

javascript的兩種數(shù)據(jù)類型轉(zhuǎn)換:1、顯式類型轉(zhuǎn)換(又稱強(qiáng)制類型轉(zhuǎn)換),主要通過使用JavaScript內(nèi)置的函數(shù)來轉(zhuǎn)換數(shù)據(jù);2、隱式類型轉(zhuǎn)換,是指JavaScript根據(jù)運(yùn)算環(huán)境自動轉(zhuǎn)換值的類型。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

JavaScript 是一種弱類型動態(tài)類型語言,變量沒有類型限制,可以隨時賦予任意值。

var x = y ? 1 : 'a';

上面代碼中,變量x到底是數(shù)值還是字符串,取決于另一個變量y的值。y為true時,x是一個數(shù)值;y為false時,x是一個字符串。這意味著,x的類型沒法在編譯階段就知道,必須等到運(yùn)行時才能知道。

雖然變量的數(shù)據(jù)類型是不確定的,但是各種運(yùn)算符對數(shù)據(jù)類型是有要求的。如果運(yùn)算符發(fā)現(xiàn),運(yùn)算子的類型與預(yù)期不符,就會自動轉(zhuǎn)換類型。比如,減法運(yùn)算符預(yù)期左右兩側(cè)的運(yùn)算子應(yīng)該是數(shù)值,如果不是,就會自動將它們轉(zhuǎn)為數(shù)值。

'4' - '3' // 1

上面代碼中,雖然是兩個字符串相減,但是依然會得到結(jié)果數(shù)值1,原因就在于 JavaScript 將運(yùn)算子自動轉(zhuǎn)為了數(shù)值。

javascript中的數(shù)據(jù)類型轉(zhuǎn)換

在js中數(shù)據(jù)類型轉(zhuǎn)換一般分為兩種,即強(qiáng)制類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換(利用js弱變量類型轉(zhuǎn)換)。

  • 顯式類型轉(zhuǎn)換主要通過使用JavaScript內(nèi)置的函數(shù)來轉(zhuǎn)換;

  • 隱式類型轉(zhuǎn)換是指JavaScript根據(jù)運(yùn)算環(huán)境自動轉(zhuǎn)換值的類型。

在js中,想要將對象轉(zhuǎn)換成原始值,必然會調(diào)用toPrimitive()內(nèi)部函數(shù),那么它是如何工作的呢?

<1> toPrimitive(input,preferedType)

input是輸入的值,preferedType是期望轉(zhuǎn)換的類型,他可以是String或者Number,也可以不傳。

1)如果轉(zhuǎn)換的類型是number,會執(zhí)行以下步驟:

 1. 如果input是原始值,直接返回這個值;

 2. 否則,如果input是對象,調(diào)用input.valueOf(),如果結(jié)果是原始值,返回結(jié)果;

 3. 否則,調(diào)用input.toString()。如果結(jié)果是原始值,返回結(jié)果;

 4. 否則,拋出錯誤。

2) 如果轉(zhuǎn)換的類型是String,2和3會交換執(zhí)行,即先執(zhí)行toString()方法。

3)可以省略preferedType,此時,日期會被認(rèn)為是字符串,而其他的值會被當(dāng)做Number。

①如果input是內(nèi)置的Date類型,preferedType視為String

②否則視為Number,先調(diào)用valueOf,在調(diào)用toString

<2>ToBoolean(argument)

類型返回結(jié)果
Underfinedfalse
Nullfalse
Booleanargument
Number僅當(dāng)argument為+0,-0或者NaN時,return false;否則return true
String僅當(dāng)argument為空字符串(長度為0)時,return false;否則return true
Symboltrue
Objecttrue

注意:除了underfined,null,false,NaN,’’,0,-0,其他都返回true

<3>ToNumber(argument)

類型返回結(jié)果
UnderfinedNaN
Null+0
Booleanargument為true,return 1;為false,return +0
Numberargument
String將字符串中的內(nèi)容轉(zhuǎn)化成數(shù)字,如'23'=>23;如果轉(zhuǎn)化失敗,則返回NaN,如‘23a’=>NaN
Symbol拋出TypeError異常
Object**先primValue= toPrimitive(argument,number),在對primValue使用ToNumber(primValue)**

<4>ToString(argument)

類型返回結(jié)果
Underfined"underfined"
Null"null"
Booleanargument為true,return "true";為false,return "false"
Number用字符串來表示這個數(shù)字
Stringargument
Symbol拋出TypeError異常
Object**先primValue= toPrimitive(argument,string),在對primValue使用ToString(primValue)**

1.隱式類型轉(zhuǎn)換:

1.1-隱式轉(zhuǎn)換介紹

· 在js中,當(dāng)運(yùn)算符在運(yùn)算時,如果兩邊數(shù)據(jù)不統(tǒng)一,CPU就無法計算,這時我們編譯器會自動將運(yùn)算符兩邊的數(shù)據(jù)做一個數(shù)據(jù)類型轉(zhuǎn)換,轉(zhuǎn)成一樣的數(shù)據(jù)類型再計算

這種無需程序員手動轉(zhuǎn)換,而由編譯器自動轉(zhuǎn)換的方式就稱為隱式轉(zhuǎn)換

· 例如1 > "0"這行代碼在js中并不會報錯,編譯器在運(yùn)算符時會先把右邊的"0"轉(zhuǎn)成數(shù)字0`然后在比較大小
————————————————
1.2-隱式轉(zhuǎn)換規(guī)則

(1). 轉(zhuǎn)成string類型: +(字符串連接符)
(2).轉(zhuǎn)成number類型:++/–(自增自減運(yùn)算符) + - * / %(算術(shù)運(yùn)算符) > < >= <= == != === !=== (關(guān)系運(yùn)算符)

加法規(guī)則
1.令lval=符號左邊的值,rval=符號右邊的值
2.令lprim=toPrimitive(lval),rprim=toPrimitive(rval)
如果lprim和rprim中有任意一個為string類型,將ToString(lprim)和ToString(rprim)的結(jié)果做字符串拼接
否則,將ToNumber(lprim)和ToNumber(rprim)的結(jié)果做算數(shù)加法

雙等規(guī)則
1.xy都為Null或者underfined,return true;一方為Null或者underfined、NaN,return false
2.如果x和y為String,Number,Boolean并且類型不一致,都轉(zhuǎn)為Number在進(jìn)行比較
3.如果存在Object,轉(zhuǎn)換為原始值在進(jìn)行比較

   //特殊情況,xy都為Null或者underfined,return true
 console.log(undefined==undefined) //true
 console.log(undefined==null) //true
 console.log(null==null) //true
 //一方為Null或者underfined、NaN,return false
 console.log("0"==null) //false
 console.log("0"==undefined) //false
 console.log("0"==NaN) //false
 console.log(false==null) //false
 console.log(false==undefined) //false
 console.log(false==NaN) //false
  
 console.log("0"=="") //false
 console.log("0"==0) //true
 console.log(""==[]) //true
 console.log(false==0) //true
 console.log(false==[]) //true

(3). 轉(zhuǎn)成boolean類型:!(邏輯非運(yùn)算符)

  //1.字符串連接符與算術(shù)運(yùn)算符隱式轉(zhuǎn)換規(guī)則易混淆
  console.log(1+true)        // 1+Number(true) ==> 1+1=2
  //xy有一邊為string時,會做字符串拼接
  console.log(1+'true')     //String(1)+2 ==> '1true'
  console.log('a'+ +'b')     //aNaN
  console.log(1+undefined)  //1+Number(undefined)==>1+NaN=NaN
  console.log(null+1)       //Number(null)+1==>0+1=1
 //2.會把其他數(shù)據(jù)類型轉(zhuǎn)換成number之后再比較關(guān)系
  //注意:左右兩邊都是字符串時,是要按照字符對應(yīng)的unicode編碼轉(zhuǎn)成數(shù)字。查看字符串unicode的方法:字符串.charCodeAt(字符串下標(biāo),默認(rèn)為0)
 console.log('2'>'10')        //'2'.charCodeAt()>'10'.charCodeAt()=50>49==>true  

  //特殊情況,NaN與任何數(shù)據(jù)比較都是NaN
 console.log(NaN==NaN)        //false
 //3.復(fù)雜數(shù)據(jù)類型在隱式轉(zhuǎn)換時,原始值(valueOf())不是number,會先轉(zhuǎn)成String,然后再轉(zhuǎn)成Number運(yùn)算
  console.log(false=={})    //false   //({}).valueOf().toString()="[object Object]"
  console.log([]+[])        //""       //[].valueOf().toString()+[].valueOf().toString()=""+""=""
  console.log({}+[])         //0
  console.log(({})+[])      //"[object Object]"
  console.log(5/[1])         //5
  console.log(5/null)         //5
  console.log(5+{toString:function(){return 'def'}})         //5def
  console.log(5+{toString:function(){return 'def'},valueOf:function(){return 3}})         //5+3=8
 //4.邏輯非隱式轉(zhuǎn)換與關(guān)系運(yùn)算符隱式轉(zhuǎn)換搞混淆(邏輯非,將其他類型轉(zhuǎn)成boolean類型)
 console.log([]==0)   //true
 console.log({}==0)   //false
 console.log(![]==0)   //true
 console.log([]==![])   //true
 console.log([]==[])   //false     //坑
 console.log({}=={})   //false     //坑
 console.log({}==!{})   //false    //坑

2.強(qiáng)制類型(顯式類型)轉(zhuǎn)換:

通過手動進(jìn)行類型轉(zhuǎn)換,Javascript提供了以下轉(zhuǎn)型函數(shù):

轉(zhuǎn)換為數(shù)值類型:Number(mix)、parseInt(string,radix)、parseFloat(string)
轉(zhuǎn)換為字符串類型:toString(radix)、String(mix)
轉(zhuǎn)換為布爾類型:Boolean(mix)

2.1 Boolean(value)、Number(value) 、String(value)

new Number(value) 、new String(value)、 new Boolean(value)傳入各自對應(yīng)的原始類型的值,可以實(shí)現(xiàn)“裝箱”-----即將原始類型封裝成一個對象。其實(shí)這三個函數(shù)不僅可以當(dāng)作構(gòu)造函數(shù),還可以當(dāng)作普通函數(shù)來使用,將任何類型的參數(shù)轉(zhuǎn)化成原始類型的值。

其實(shí)這三個函數(shù)在類型轉(zhuǎn)換的時候,調(diào)用的就是js內(nèi)部的ToBoolean(argument)、ToNumber(argument)、ToString(argument)
2.2 parseInt(string,radix)
將字符串轉(zhuǎn)換為整數(shù)類型的數(shù)值。它也有一定的規(guī)則:

(1)忽略字符串前面的空格,直至找到第一個非空字符
(2)如果第一個字符不是數(shù)字符號或者負(fù)號,返回NaN
(3)如果第一個字符是數(shù)字,則繼續(xù)解析直至字符串解析完畢或者遇到一個非數(shù)字符號為止
(4)如果上步解析的結(jié)果以0開頭,則將其當(dāng)作八進(jìn)制來解析;如果以0x開頭,則將其當(dāng)作十六進(jìn)制來解析
(5)如果指定radix參數(shù),則以radix為基數(shù)進(jìn)行解析

   let objj={
       valueOf:function(){return '2px'},
       toString:function(){return []}
    }
    parseInt(objj)   //2
    parseInt('001')  //1   
    parseInt('22.5')  //22
    parseInt('123sws')  //123   
    parseInt('sws123')  //NaN
    //特殊的
    parseInt(function(){},16)   //15
    parseInt(1/0,19)               //18
    //瀏覽器代碼解析器:parseInt里面有兩個參數(shù),第二個參數(shù)是十九進(jìn)制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i),額,1/0,好吧先運(yùn)算 結(jié)果等于Infinity,
   //I好的十九進(jìn)制有認(rèn)識,n十九進(jìn)制不存在不認(rèn)識,不管后面有沒有了,立即返回i(i對應(yīng)的十進(jìn)制中的18),所以返回18
    parseInt(1/0,16)                //NaN   //同上,16進(jìn)制滅有對應(yīng)i,返回NaN
    parseInt(0.0000008)         //8    //String(0.0000008),結(jié)果為8e-7
    parseInt(0.000008)        //0
    parseInt(false,16)         //250   //16進(jìn)制,'f'認(rèn)識, 'a'認(rèn)識, 'l'哦,不認(rèn)識,立即返回fa (十六進(jìn)制的fa轉(zhuǎn)換成十進(jìn)制等于250)
    parseInt('0x10'))          //16     //只有一個參數(shù),好的,采用默認(rèn)的十進(jìn)制, '0x',額,這個我認(rèn)識,是十六進(jìn)制的寫法, 十六進(jìn)制的10轉(zhuǎn)換成十進(jìn)制等于16
    parseInt('10',2)              //2     //返回二進(jìn)制的10 轉(zhuǎn)換成十進(jìn)制等于2

2.3 parseFloat(string)

將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)類型的數(shù)值.規(guī)則:

它的規(guī)則與parseInt基本相同,但也有點(diǎn)區(qū)別:字符串中第一個小數(shù)點(diǎn)符號是有效的,另外parseFloat會忽略所有前導(dǎo)0,如果字符串包含一個可解析為整數(shù)的數(shù),則返回整數(shù)值而不是浮點(diǎn)數(shù)值。

2.4 toString(radix)

除undefined和null之外的所有類型的值都具有toString()方法,其作用是返回對象的字符串表示

感謝各位的閱讀!關(guān)于“javascript有多少中數(shù)據(jù)類型轉(zhuǎn)換”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

分享題目:javascript有多少中數(shù)據(jù)類型轉(zhuǎn)換
路徑分享:http://aaarwkj.com/article30/jpopso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站App設(shè)計、ChatGPT外貿(mào)建站、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
99久久久精品国产免费| 91狠狠综合久久精品| 国产粉嫩一区二区三区在线观看| 自拍偷拍亚洲精品第一页| 亚洲欧美国产精品日韩| 中文字幕色视频在线观看| 高清欧美大片免费观看| 亚洲黄色录像一区二区人妻黑人| 精品女厕一区二区三区| 国产亚洲香蕉精彩视频| 五月婷婷六月丁香伊人网| 日韩欧美在线一区二区| 国产精品麻豆久久av| 国产一区在线视频无卡顿| 国产97精品在线播放| 国产欧美一区二区三区久久| 国产亚洲成人精品一区| 蜜臀av网站在线播放| 黄色一级日本黄色一级| 九色91成人在线视频| 黑人巨大精品欧美黑寡妇| 国产系列在线播放一区二区三区| 国产日产亚洲欧美综合另类| 久久国产精品午夜视频| 久久亚洲女同第一区综合| 日本一区二区三区精彩视频| 久久精品视频亚洲一级| 日本不卡不码高清免费| 久久国产精品一区av瑜伽| 九九视频在线精品免费观看| 亚洲国产传媒在线观看| 在线观看中文字幕一区| 中文字幕日韩欧美一区| 91黄色国产在线播放| 亚洲中文字幕在线乱码| 东京热男人的天堂色狠爱| 东京热男人的天堂视频| 五月婷婷丁香视频在线| 91亚洲婷婷国产综合精品| 亚洲少妇熟女一区二区三区| 亚洲第一中文字幕久久|