最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScrip簡單數(shù)據(jù)類型隱式轉換的實現(xiàn)

 更新時間:2023年05月15日 09:58:54   作者:lihouyi  
本文主要介紹了JavaScrip簡單數(shù)據(jù)類型隱式轉換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

JavaScript是一種弱數(shù)據(jù)類型語言 ,在JavaScript中定義變量不需要提前指定變量類型,變量的數(shù)據(jù)類型是在程序運行過程中由JavaScript引擎動態(tài)決定,因而可以使用同一個變量來存儲不同類型的數(shù)據(jù)(var、let、const),這也意味著它會自動轉換值的數(shù)據(jù)類型,以便數(shù)據(jù)之間更加容易相互比較和操作。除去我們比較熟知的顯式轉換,JavaScript中的隱式轉換更加需要理解和一定的經(jīng)驗。下面將為大家詳細的列舉一下JS隱式轉換的各種情況。

在JavaScript中,數(shù)據(jù)類型的隱式轉換主要有三種情況:

  • 轉換為number類型
  • 轉換為boolean類型
  • 轉換為string類型

JavaScript隱式類型轉換通常發(fā)生在以下情況:

  • 當使用不同類型的值進行操作時(數(shù)字和字符串)
  • 當使用相等或不等運算符(== 或 !=)進行比較時
  • 當對一個非布爾類型的值進行布爾運算時(if語句或邏輯運算符)

JavaScrip隱式轉換規(guī)則

JavaScript中隱式類型轉換的機制是比較復雜的,涉及到了數(shù)據(jù)類型、操作符、運算順序等多方面的因素。

當兩個操作數(shù)具有不同的類型時,系統(tǒng)內(nèi)部根據(jù)一系列規(guī)則來決定將其轉換為相同的類型,這些規(guī)則包括:

  • 如果一個操作數(shù)是數(shù)字,則將另一個操作數(shù)轉換為數(shù)字
  • 如果一個操作數(shù)是字符串,則將另一個操作數(shù)轉換為字符串
  • 如果一個操作數(shù)是布爾值,則將另一個操作數(shù)轉換為布爾值
  • 如果一個操作數(shù)是對象,則嘗試將另一個操作數(shù)轉換為對象,否則將其轉換為原始類型

另外:

  • + 號兩邊只要有一個是字符串,都會把另外一個轉成字符串
  • 除了+以外的算術運算符 比如 - * / 等都會把數(shù)據(jù)轉成數(shù)字類型
  • 邏輯非 ! 轉換為布爾
  • +號作為正號解析可以轉換成數(shù)字型
  • 任何數(shù)據(jù)和字符串相加結果都是字符串

JavaScrip類型轉換詳解

轉換成Number類型

轉為Number類型:++ / --(自增自減運算符) + - * / %(算術運算符) > < >= <= == != === !== (關系運算符)。null轉換為數(shù)字為0, undefinedNaN

簡單數(shù)據(jù)轉換數(shù)字對照:

原始數(shù)據(jù)類型轉換之后的值
空字符 ''或""0
非空字符串將字符內(nèi)的數(shù)據(jù)內(nèi)容變?yōu)閿?shù)據(jù),如果還有其他符號中文等轉為NaN
true1
false0
null0
undefinedNaN
NaN(不用轉,typeof NaN 得到"number")

示例:

// 隱式轉換為數(shù)字型的運算符
// 算術運算符 - *  /   比較運算符  >   ==
console.log(8 - '3') // 5
console.log('1999' * '2') // 3998,此處兩個string型全都得轉換為number型
console.log('35' - 34)  //1 console.log('35' - '34') //1
console.log('40' / '2') //20
console.log('35' % 2)  //1
console.log('35' % '2') //1
console.log(5 - undefined) //NaN 因為Undefined轉為數(shù)字為NaN
console.log(5 - null) //5
console.log(44%('2a')) //NaN,其中,2a進行強轉后為NaN,NaN參與運算返回NaN
console.log('5'>'3') //true 此處直接比較的ASCII碼。
console.log(3 > '1')   // true
console.log(3 == '3')  // true
console.log(3 == '+3')  // true,此處的+號相當于是類型轉換
console.log(3 == '-3')  // false
console.log(3 == '*3')  // false
console.log(3 == '/3')  // false
console.log(3 == 'a3')  // false
console.log('a' == 97)  // false
console.log('a' > 'A')  // true 此處比較的是ASCII碼,其中a為97 A為65,因此為true
console.log('a' > '')  // true
console.log('' == 0) //true
// + 正號使用的時候,也會把字符串轉換為 數(shù)字型
console.log('123')  // '123'
console.log(+'123')  // 123
console.log(typeof +'123') // number
console.log(+'0x12' == 18) // true
console.log('55' + true) //'55true'
// undefined、null、boolean類型轉換為數(shù)字
console.log(NaN == NaN) //false,NaN比較特殊,它自己不等于自己
console.log(undefined == 0) //false
console.log(undefined == NaN) //false
console.log(undefined == null) //true,此處undefined和null值都為空,因此能夠相等
console.log(null == 0) //false  此處沒有進行類型轉換,因為null是一個值類型,它的數(shù)值就是null,我們在使用==時,會直接把null這個數(shù)值與0進行比較,結果為false
console.log(null === 0) // false
console.log(null >= 0) //false  null要進行數(shù)值比較,此處便會嘗試轉為number,則為0,結果為 true
console.log(false == null) //false 特殊情況,理論上都應該轉換為0比較然后相等true,但實際是直接拿值比較,不會先轉為為數(shù)字
console.log(true == 1) //true
console.log(false == 1) //false
console.log(true > false) //true 先轉化為1和0數(shù)字進行比較
console.log(true + 1) // 2
console.log(true + null) //1,其中true轉換為1,null轉換為0
console.log(undefined + 1) // NaN
console.log('5' - true) //4
console.log('5' - false) //0
//數(shù)組轉換為數(shù)字
console.log([9] == 9) //true
console.log([9,'a'] == 9) //false
//特殊情況
console.log({} == {}) // false,對象類型比的是地址,不同對象地址不同
console.log([]==[])   // false,理由同上

轉換為String類型

簡單數(shù)據(jù)轉換字符串對照:

原始數(shù)據(jù)類型轉換之后的值
數(shù)字類型數(shù)字類型的字符表示
null‘null’
undefined‘undefined’
布爾類型true變’true’,false變’false’

此處注意點為-0轉換為string類型為'0'

["a","b"]轉換string類型為"a,b"

[]轉換為string類型為""

轉換為Boolean類型

數(shù)據(jù)邏輯判斷邏輯運算之中會隱式轉換為boolean類型

轉換為布爾型:空字符、0、-0、undefined、null、false、NaN轉換為布爾值后為false,其余為true

+ 號兩邊只要有一個是字符串,都會把另外一個轉成字符串

連續(xù)使用兩個非操作符(!!)可以將一個數(shù)強制轉換為boolean類型,這在開發(fā)之中比較實用。

簡單數(shù)據(jù)轉換布爾型對照:

數(shù)據(jù)類型轉換為true的值轉換為false的值
String任何非空字符串空字符串(""或’')
Number任何非零數(shù)字0和NaN
Object任何對象null
Undefined不適用undefined

示例:

//隱式轉換為布爾型的運算符  !邏輯非
console.log(!true)  // false 
console.log(!0)  // true
console.log(!'')  // true
console.log(!null) // true
console.log(!undefined)  // true
console.log(!NaN)  // true
console.log(!false)  // true
console.log(!'hello') // false

JavaScrip特殊操作符對類型轉換的影響

!邏輯非運算符

!會將后面的數(shù)據(jù)先轉成布爾值,然后取反

var a; //a = undefined
var r = !!a; 
console.log(r) //false
!!{} // true
!!undefined // false
!!null // false
!!NaN //fales

== 相等運算符

比較操作符會為兩個不同類型的操作數(shù)轉換類型,然后進行嚴格比較。當兩個操作數(shù)都是對象時,JavaScript會比較其內(nèi)部引用,當且僅當他們的引用指向內(nèi)存中的相同對象時才相等,即他們在棧內(nèi)存中的引用地址相同。

1.類型相同

如果比較的是兩個對象,則比較兩個對象的指針是否指向同一個對象

let a = {}
let b = {}
a==b //false
let a = {}
let b = a;
a==b //true

2.類型不同

如果兩邊類型不同,則兩邊都嘗試轉成number類型。對于引用類型,先調用valueOf(),如果能轉成數(shù)字,則進行比較。不能轉成數(shù)字就調用toString()方法轉成字符串。

tips:因為null是一個值類型,它的數(shù)值就是null,我們在使用==時,會直接把null這個數(shù)值與數(shù)值進行比較,而不是轉換為0

console.log(3 == '3')  // true
console.log(3 == '+3')  // true,此處的+號相當于是類型轉換
console.log(3 == '-3')  // false
console.log(3 == 'a3')  // false
console.log(+'0x12' == 18) // true
console.log('' == 0) //true
console.log(null == 0) //false  此處沒有進行類型轉換,因為null是一個值類型,它的數(shù)值就是null,我們在使用==時,會直接把null這個數(shù)值與0進行比較,結果為false
console.log(NaN == NaN) //false,NaN比較特殊,它自己不等于自己
console.log(undefined == 0) //false
console.log(undefined == NaN) //false
console.log(undefined == null) //true,此處undefined和null值都為空,因此能夠相等

面試題

//問題1:
console.log(new String('abc') == true)//flase
//step1:右側轉成數(shù)字1,變成:
new String('abc')==1
//step2 new String('abc').valueOf()不是數(shù)字也不是字符串,再調用toString()
'abc' == 1
//step3:字符串轉數(shù)字
NaN == 1 //false,NaN和任何類型比較都為false
//問題2:
console.log({}==true)//false
//step1:右側轉成數(shù)字
{} == 1
//step2 {}.valueOf()不是數(shù)字也不是字符串,再調用toString()
'[object Object]' ==1  
//step3:字符串轉數(shù)字
NaN == 1 //false,NaN和任何類型比較都為false
//問題3:
console.log([]==![])//true
//step1:!優(yōu)先級比==高,先轉右邊,[]是對象類型,轉成布爾值為true,!true就是false
[]==false
//step2:右側轉成數(shù)字為0
[]==0
//step3:左側是一個對象,valueOf()轉出來不是字符也不是字符串,調用toString(),得到空字符串
'' == 0
//step4:字符串轉成數(shù)字
0 == 0 //true

比較運算符

字符串類型比較大小時,不進行類型轉換,而是逐位比較ASCII碼,第一位不同則返回結果,否則繼續(xù)比較第二位,直到某一位不同為止。

字符串與數(shù)字或者boolean與數(shù)字比較時,會進行隱式數(shù)據(jù)類型轉換

示例

console.log('5555555' < '6') //true,首先比較第一個字符串的第一個字符,如果不同直接返回結果
console.log('5'>'3') //true,此處直接比較的ASCII碼。
console.log(3 > '1') // true
console.log('a' > 'A')  // true,此處比較的是ASCII碼,其中a為97 A為65,因此為true
console.log('a' > '')  // true
console.log(null >= 0) //false,null要進行數(shù)值比較,此處便會嘗試轉為number,則為0,結果為 true

+ 算數(shù)運算符

+號作為一元操作符時,它就會將這個數(shù)轉換為數(shù)字類型

+號作為二元操作符時

console.log(3 == '+3')  // true,此處的+號相當于是類型轉換
console.log('55' + true) //'55true'
console.log(true + 1) // 2
console.log(true + null) //1,其中true轉換為1,null轉換為0
console.log(undefined + 1) // NaN

+ 號兩邊只要有一個是字符串,都會把另外一個轉成字符串,此時+號為連接符

總結

到此這篇關于JavaScrip簡單數(shù)據(jù)類型隱式轉換的實現(xiàn)的文章就介紹到這了,更多相關JavaScrip 數(shù)據(jù)類型隱式轉換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS使用iView的Dropdown實現(xiàn)一個右鍵菜單

    JS使用iView的Dropdown實現(xiàn)一個右鍵菜單

    這篇文章主要介紹了JS使用iView的Dropdown實現(xiàn)一個右鍵菜單功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • js比較日期大小的方法

    js比較日期大小的方法

    這篇文章主要介紹了js比較日期大小的方法,涉及javascript日期的轉化、匹配、比較等常用操作技巧,需要的朋友可以參考下
    2015-05-05
  • JavaScript實現(xiàn)獲取設備網(wǎng)絡連接信息

    JavaScript實現(xiàn)獲取設備網(wǎng)絡連接信息

    作為前端開發(fā),做好用戶體驗是很重要的,日常開發(fā)中我們經(jīng)常可以遇到用戶網(wǎng)速慢導致靜態(tài)資源加載慢,從而給影響用戶體驗,所以本文來和大家分享一個有趣的API,可以實現(xiàn)獲取網(wǎng)絡信息
    2023-05-05
  • javascript操作元素的常見方法小結

    javascript操作元素的常見方法小結

    這篇文章主要介紹了javascript操作元素的常見方法,結合實例形式總結分析了JavaScript針對頁面元素動態(tài)獲取、賦值、動態(tài)操作相關使用技巧,需要的朋友可以參考下
    2019-11-11
  • 微信小程序 云開發(fā)模糊查詢實現(xiàn)解析

    微信小程序 云開發(fā)模糊查詢實現(xiàn)解析

    這篇文章主要介紹了微信小程序 云開發(fā)模糊查詢實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • js函數(shù)柯里化的方法和作用實例分析

    js函數(shù)柯里化的方法和作用實例分析

    這篇文章主要介紹了js函數(shù)柯里化的方法和作用,結合實例形式分析了js函數(shù)柯里化的方法、功能及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 原生JS實現(xiàn)匯率轉換功能代碼實例

    原生JS實現(xiàn)匯率轉換功能代碼實例

    這篇文章主要介紹了原生JS實現(xiàn)匯率轉換功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 選擇復選框按鈕置灰否則按鈕可用

    選擇復選框按鈕置灰否則按鈕可用

    這篇文章主要介紹了使用js實現(xiàn)選擇復選框按鈕置灰否則按鈕可用,需要的朋友可以參考下
    2014-05-05
  • 原生js實現(xiàn)半透明遮罩層效果具體代碼

    原生js實現(xiàn)半透明遮罩層效果具體代碼

    半透明遮罩層效果基本上都是使用插件實現(xiàn)的,下面為大家分享下使用原生js實現(xiàn)半透明遮罩效果,感興趣的朋友可以參考下哈,希望對你熟悉原生js有所幫助
    2013-06-06
  • js post提交調用方法

    js post提交調用方法

    這篇文章主要介紹了js post提交調用方法,需要的朋友可以參考下
    2014-02-02

最新評論

加查县| 玉山县| 读书| 略阳县| 剑川县| 富裕县| 崇礼县| 霍城县| 舒兰市| 宜良县| 巴彦淖尔市| 文山县| 镇原县| 常德市| 宁化县| 南涧| 新巴尔虎左旗| 遂川县| 松溪县| 鹤岗市| 商南县| 夏邑县| 聂拉木县| 双峰县| 綦江县| 济源市| 工布江达县| 鹿邑县| 玉门市| 山东省| 和硕县| 炎陵县| 百色市| 隆尧县| 赣榆县| 榆林市| 清涧县| 丘北县| 四川省| 从化市| 钟山县|