日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS中的数据类型转换

發布時間:2023/12/2 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS中的数据类型转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ES5中一共有6種數據類型,其中5種基本類型(String、Number、Boolean、Null、Undefined),1種引用類型(Object)?;绢愋椭悼梢韵嗷Q轉換,并且引用類型值也可以通過某種方式轉換成基本類型值。

引用類型值轉換為基本類型值的方法有兩個,分別是 valueOf方法和toString方法。

強制轉換為基本類型值可以使用各自的函數 String,Boolean, Number。

轉換為String

類型值strting值
String“a”“a”
Number1“1”
Booleantrue“true”
Booleanfalse“false”
Nullnull“null”
Undefinedundefined“undefined”
Object{}{}.toString()

普通對象Object轉換為String,如果Object沒有自定義toString方法則默認返回對象的[[class]]屬性,如題如下:

1.自定義對象具有toString方法

var a = {toString: function(){return '我是toString的返回值';} }; String(a); //我是toString的返回值

2.自定義對象并不具有toString方法

var a = {}; String(a); // [object Object]var b = []; String(b); // "" 數組有自定義的toString方法 將數組元素用 , 拼接成字符串并返回

注:Number轉換為String稍微有點特殊,如果數字過大或者過小則用指數表示。

轉換為Number

類型值Number值
Number11
String“”0
String“1”1
String“1a”NaN(數字的一種,意思是Not a Number)
Booleantrue1
Booleanfalse0
Nullnull0
UndefinedundefinedNaN
Object{}調用 valueOf() 或者 toString()

對象轉為Number類型步驟:

  • 調用對象的 valueOf 方法(如果有該方法),檢查返回值
  • 如果valueOf返回值是基本類型則轉為Number
  • 如果valueOf返回值不是基本類型則調用toString
  • 如果toString返回值是基本類型則轉為Number
  • 如果toString返回值也不是基本類型則報錯
  • 1.具有valueOf方法和toString方法的對象

    var a = {valueOf: function(){return 1;},toString: function(){return '2';} } Number(a); // 1

    2.只具有toString方法的對象

    var a = {toString: function(){return '2';} } Number(a); //2 這個 2 是數字并不是字符串

    3.具有返回引用類型值得valueOf方法和toString方法

    var a = {valueOf: function(){return {};},toString: function(){return {};} } Number(a); //TypeError 錯誤

    轉換為Boolean

    在JS中所有值可以分為兩類真值假值,對象(引用類型)一般都是真值。

    類型值Boolean類型
    Booleantruetrue
    Booleanfalsefalse
    String“1”true
    String“”false
    Number0false
    Number1true
    NumberNaNfalse
    Object{}true

    隱式強制類型轉換

    在JS中有很多的隱式強制類型轉換,在一些并不明顯的地方發生了強制類型轉換,例如加法運算符(+),減法運算符(-),邏輯運算符 && 和 ||等。

    符號 + 中出現的隱式強制類型轉換

    加法運算符既可以用作字符串的拼接,也可以用作數字的相加。

    加法運算符的兩個操作數只要有一個是字符串則執行字符串的拼接,否則執行數字的相加。

    var a = '1' + 1; console.log(a); // '11'var b = 1 + 1; console.log(2); // 2

    加法運算符的兩個操作數中如果有對象則遵循以下步驟:

  • 調用 valueOf 方法,如果返回值是基本值則依據第一條繼續執行相加操作

  • 如果返回值不是基本值則調用 toString 方法,如果返回值是基本值則依據第1條繼續執行相加操作

  • 如果 toString 也不返回基本值則報錯

  • // 1. 應該是首先調用valueOf方法,并且對于返回的基本類型值不會toNumber var a = {valueOf: function(){return '1';},toString: function(){return 1;} };console.log(a + 1); // '11'// 2. 如果valueOf返回的不是基本類型值則調用toString var b = {valueOf: function(){return {};},toString: function(){return '1';} };console.log(b + 1); // '11'// 3. 如果兩個方法都不返回基本類型值則報錯 var c = {valueOf: function(){return {};},toString: function(){return {};} };console.log(c + 1); TypeError 報錯了

    如果操作數中有Boolean,依據另一個操作數的類型來強制類型轉換

  • 另一個操作數是String則將Boolean轉換為String,依據轉換為String規則

  • 另一個操作數是Number則將Boolean轉換為Number,依據轉換為Number規則

  • var a = 1 + true; console.log(a); // 2var b = 1 + false; console.log(b); // 1var c = '1' + true; // '1true' console.log(c); // '1true'var d = '1' + false; console.log(d); // '1false'

    根據以上規則經??吹降?a + '' 就不難理解了,就是要將a轉換為字符串。但是要注意的是a如果是對象的話和直接調用String(a)的結果在特定情況下還是有區別的。區別在于String方法并不會調用valueOf方法(但是正常情況下并不會自定義對象的valueOf方法)。

    算術運算符中除了 + 以外的其他運算符都會將兩個操作數依據轉換為Number規則換為Number,然后在進行操作。

    關于 [] + {} 和 {} + [] 得到結果不一樣的解釋

    [] + {}; // 控制臺中結果是 "[object Object]"{} + []; // 控制臺中結果是 數字0

    []轉為基本類型值為 “” 空子符串,{}轉為基本類型值為”[object Object]”則得到結果”[object Object]”

    JS中以大括號開頭會被當做代碼塊,{} + [] 解釋為 +[]則得到了0

    到Boolean類型值的隱式強制類型轉換

    在以下語句和表達式中需要Boolean類型值的地方都會出現依據轉為Boolean規則向Boolean類型值轉換:

  • if( … )
  • for( …; …; … ) 括號中第二個表達式
  • while( … ) 和 do…while( … )
  • … ? … : …
  • 邏輯運算符 && 和 || 的左操作數(為什么是左操作數?右邊為什么沒有變成Boolean類型值?)
  • ! 取反
  • 寬松等于(==)中的隱式強制類型轉換

    在JS中寬松等于有很多讓人捉摸不透的地方例如 [] == false 返回的是true,但是 [] 顯然并不是假值但是卻相等,[]==![] 你猜的沒錯這個也返回true,"0"==false 你又才對了這個返回的還是true,我想說的是”0”并不是假值但是為什么還會返回true呢???

    詳情請看 JS中令人捉摸不透的寬松等于

    參考:
    你不知道的javascript中卷

    總結

    以上是生活随笔為你收集整理的JS中的数据类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。