JS中數據類型轉換

来源:https://www.cnblogs.com/jiajialove/archive/2019/09/30/11611826.html
-Advertisement-
Play Games

JS中數據類型轉換彙總 JS中的數據類型分為 【基本數據類型】 數字 number 字元串 string 布爾 boolean 空 null 未定義 undefined 【引用數據類型】 對象 object 普通對象 數組對象 (Array) 正則對象 (RegExp) 日期對象 (Date) 數學 ...


JS中數據類型轉換彙總

JS中的數據類型分為
【基本數據類型】
數字 number
字元串 string
布爾 boolean
空 null
未定義 undefined
【引用數據類型】
對象 object
- 普通對象
- 數組對象 (Array)
- 正則對象 (RegExp)
- 日期對象 (Date)
- 數學函數 (Math)
...
函數 function

真實項目中,根據需求,我們往往需要把數據類型之間進行轉換

把其它數據類型轉換為number類型

1.發生的情況

  • isNaN檢測的時候:當檢測的值不是數字類型,瀏覽器會自己調用Number方法把它先轉換為數字,然後再檢測是否為非有效數字
isNaN('3') =>false
  Number('3')->3
  isNaN(3)->false

isNaN('3px') =>true
  Number('3px')->NaN
  isNaN(NaN)->true
  • 基於parseInt/parseFloat/Number去手動轉換為數字類型
  • 數學運算:+ - * / %,但是“+”不僅僅是數學運算,還可能是字元串拼接
'3'-1 =>2
  Number('3')->3
  3-1->2

'3px'-1 =>NaN

'3px'+1 =>'3px1' 字元串拼接

var i='3';
i=i+1; =>'31'
i+=1; =>'31'
i++; =>4  i++就是單純的數學運算,已經摒棄掉字元串拼接的規則
  • 在基於“==”比較的時候,有時候也會把其它值轉換為數字類型
  • ...

2.轉換規律

//=>轉換的方法:Number(瀏覽器自行轉換都是基於這個方法完成的)

【把字元串轉換為數字】
只要遇到一個非有效數字字元,結果就是NaN
'' ->0
' ' ->0 空格(Space)
'\n' ->0 換行符(Enter)
'\t' ->0 製表符(Tab)


【把布爾轉換為數字】
true ->1
false ->0

【把沒有轉換為數字】
null ->0
undefined ->NaN

【把引用類型值轉換為數字】
首先都先轉換為字元串(toString),然後再轉換為數字(Number)

把其它類型值轉換為字元串

1.發生的情況

  • 基於alert/confirm/prompt/document.write等方法輸出內容的時候,會把輸出的值轉換為字元串,然後再輸出
alert(1) =>'1'
  • 基於“+”進行字元串拼接的時候
  • 把引用類型值轉換為數字的時候,首先會轉換為字元串,然後再轉換為數字
  • 給對象設置屬性名,如果不是字元串,首先轉換為字元串,然後再當做屬性存儲到對象中(對象的屬性只能是數字或者字元串)
  • 手動調用toString/toFixed/join/String等方法的時候,也是為了轉換為字元串
var n=Math.PI;//=>獲取圓周率:
n.toFixed(2) =>'3.14'

var ary=[12,23,34];
ary.join('+') =>'12+23+34'
  • ...

2.轉換規律

//=>調用的方法:toString

【除了對象,都是你理解的轉換結果】
1 ->'1'
NaN ->'NaN'
null ->'null'
[] ->''
[13] ->'13'
[12,23] ->'12,23'
...

【對象】
{name:'xxx'} ->'[object Object]'
{} ->'[object Object]'
不管是啥樣的普通對象,最後結果都一樣

把其它值轉換為布爾類型

1.發生的情況

  • 基於!/!!/Boolean等方法轉換
  • 條件判斷中的條件最後都會轉換為布爾類型
  • ...
if(n){
  //=>把n的值轉換為布爾驗證條件真假
}

if('3px'+3){
  //=>先計算表達式的結果'3px3',把結果轉換為布爾true,條件成立
}

2.轉換的規律
只有“0/NaN/''/null/undefined”五個值轉換為布爾的false,其餘都是轉換為true

特殊情況:數學運算和字元串拼接 “+”

//=>當表達式中出現字元串,就是字元串拼接,否則就是數學運算

1+true =>2 數學運算
'1'+true =>'1true' 字元串拼接

[12]+10 =>'1210' 雖然現在沒看見字元串,但是引用類型轉換為數字,首先會轉換為字元串,所以變為了字元串拼接
({})+10 =>"[object Object]10"
[]+10 =>"10"

{}+10 =>10 這個和以上說的沒有半毛錢關係,因為它根本就不是數學運算,也不是字元串拼接,它是兩部分代碼
  {} 代表一個代碼塊(塊級作用域)
  +10 才是我們的操作
  嚴格寫法:{}; +10;

思考題:

12+true+false+null+undefined+[]+'佳佳'+null+undefined+[]+true
=>'NaN佳佳nullundefinedtrue'

12+true ->13
13+false ->13
13+null ->13
13+undefined ->NaN
NaN+[] ->'NaN'
'NaN'+'佳佳' ->'NaN佳佳'
...
'NaN佳佳rueundefined'
'NaN佳佳trueundefined'+[] ->'NaN佳佳trueundefined'
...
=>'NaN佳佳trueundefinedtrue'

特殊情況:“==”在進行比較的時候,如果左右兩邊的數據類型不一樣,則先轉換為相同的類型,再進行比較

對象==對象:不一定相等,因為對象操作的是引用地址,地址不相同則不相等

{name:'xxx'}=={name:'xxx'} =>false
[]==[] =>false

var obj1={};
var obj2=obj1;
obj1==obj2 =>true

==========================>上面是重點強調的

對象==數字:把對象轉換為數字
對象==布爾:把對象轉換為數字,把布爾也轉換為數字
對象==字元串:把對象轉換為數字,把字元串也轉換為數字
字元串==數字:字元串轉換為數字
字元串==布爾:都轉換為數字
布爾==數字:把布爾轉換為數字
===========================>不同情況的比較,都是把其它值轉換為數字,然後再進行比較的

null==undefined:true
null===undefined:false
null&&undefined和其它值都不相等

NaN==NaN:false
NaN和誰都不相等包括自己
===========================>以上需要特殊記憶

1==true =>true
1==false =>false
2==true =>false  規律不要混淆,這裡是把true變為數字1   //未掌握


[]==true:false  都轉換為數字 0==1
![]==true:false

[]==false:true  都轉換為數字 0==0
![]==false:true  先算![],把數組轉換為布爾取反=>false  =>false==false

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • js垃圾回收 js能夠自動回收申請卻未使用的記憶體,由於每次清除需要的性能較大,不是時時在刷新,而是每隔一段時間才進行一次。 回收的兩種方式 標記清除(常用) 在記憶體中先標記變數,然後清除那些那些進入環境或者引用的變數的標記,當進入環境退出環境,將被重新標記並被清除,釋放出記憶體。 引用計數 計算變數被 ...
  • 1、如何創建一個Vue實例對象? 當一個Vue實例(如上面的vm)被創建後,它將data對象裡面的所有的屬性加入到Vue的響應式系統中。當這些屬性的值發生改變時,視圖會產生“響應”, 即視圖展示最新的數據。 如何雙向式綁定數據?用v-model來綁定數據,如: 2、if else 如何實現?用v-i ...
  • 前端基於VUE的v charts的曲線顯示 [toc] 1. 應用背景 在做一個某路燈管理處的物聯網項目時,需要統計8個電錶的電能曲線(時間 電能),需求就是能生成日報(24個點,間隔1小時,實時),月報(30個點,間隔1天,取每天的凌晨1點數據),年報(每個月,1號凌晨1點數據開始間隔9天,每個月 ...
  • /*可以直接複製,F12粘貼運行*/ var n = prompt("請輸入階數:", 9); n = n - 0; var t1 = new Date(); var data = new Array(); function print(str) { if (typeof str == "numbe ...
  • 使用 jQuery-File-Upload 庫的時候碰到了 $(...).fileupload is not a function 和 $.widget is not a function 問題。 解決方法 :jquery.ui.widget.js 這個js文件一定要放在這個庫其它js文件的前面。 ...
  • 智慧燈桿、三維智慧燈桿、3D燈桿、3D定位、三維室內定位、3d建築,3d消防,消防演習模擬,3d庫房,3d檔案室,3d密集架,webGL,threejs,3d機房,bim管理系統 ...
  • <!DOCTYPE html><html><style> *{padding: 0;margin: 0} #open{ width: 300px; height: 300px; background-color: brown; position: relative; border-radius:50 ...
  • 字體的分類: serif (襯線字體){在筆畫上面有些特殊的修飾效果} sans-serif (非襯線字體){橫平豎直.橫就是橫,點就是點} monospace ( 等寬字體) cursive ( 草書字體) fantasy (虛幻字體) 以上這些分類都是一些大的分類, 並沒有涉及具體的類型,如果將 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...