捋一捋Javascript數據類型轉換規則

来源:http://www.cnblogs.com/allenlei/archive/2016/12/11/6160912.html
-Advertisement-
Play Games

一、數據類型 5種基本數據類型:Null/Undefined/String/Boolean/Number 1種複雜數據類型:Object 二、數據類型檢測 傳送門《幾種JS數據類型方式及其局限性》 1、typeof 2、instanceof/constructor 3、Object.prototyp ...


一、數據類型

5種基本數據類型:Null/Undefined/String/Boolean/Number

1種複雜數據類型:Object

二、數據類型檢測

傳送門《幾種JS數據類型方式及其局限性》

1、typeof

2、instanceof/constructor

3、Object.prototype.toString.call(value)

4、Object.prototype.toString

三、數據類型轉換

JS內部提供不同數據類型的自動轉換機制,在某處預期為某種類型而不是某種類型時,就會自動轉換為預期類型,這就是我們常說的隱式轉換。

1、強制類型轉換

在瞭解隱式轉換的規則前先來看看強制類型轉換,強制類型轉換主要是用Boolean()/String()/Number()將各類型的數據轉換成布爾、字元串、數值型數據。

Boolean() 函數

當要轉換的值是至少有一個字元的字元串、非 0 數字或對象時,Boolean() 函數將返回 true。如果該值是空字元串、數字 0、undefined 或 null,它將返回 false。

var b1 = Boolean("");		//false - 空字元串
var b2 = Boolean("hello");	//true - 非空字元串
var b1 = Boolean(50);		//true - 非零數字
var b1 = Boolean(null);		//false - null
var b1 = Boolean(0);		//false - 零
var b1 = Boolean(new object());	//true - 對象

Number() 函數

Number() 函數的強制類型轉換與 parseInt() 和 parseFloat() 方法的處理方式相似,只是它轉換的是整個值,而不是部分值。

parseInt() 和 parseFloat() 方法只轉換第一個無效字元之前的字元串,因此 "1.2.3" 將分別被轉換為 "1" 和 "1.2"。

用 Number() 進行強制類型轉換,"1.2.3" 將返回 NaN,因為整個字元串值不能轉換成數字。如果字元串值能被完整地轉換,Number() 將判斷是調用 parseInt() 方法還是 parseFloat() 方法。

String() 函數

最後一種強制類型轉換方法 String() 是最簡單的,因為它可把任何值轉換成字元串。

要執行這種強制類型轉換,只需要調用作為參數傳遞進來的值的 toString() 方法,即把 12 轉換成 "12",把 true 轉換成 "true",把 false 轉換成 "false",以此類推。

強制轉換成字元串和調用 toString() 方法的唯一不同之處在於,對 null 和 undefined 值強制類型轉換可以生成字元串而不引發錯誤:

var s1 = String(null);	//"null"
var oNull = null;
var s2 = oNull.toString();	//會引發錯誤

 

2、自動類型轉換

說完了強制類型轉換,再來看看自動類型轉換,實際上自動類型轉換是建立在強制類型轉換的基礎上,當預期某個位置應該是某類型(布爾、數值、字元串)的數據時,就會調用相應的強制類型轉換函數,這個是自動進行的。

*當JavaScript遇到預期為布爾值的地方(比如if語句的條件部分),就會將非布爾值的參數自動轉換為布爾值。系統內部會自動調用Boolean函數。

因此除了以下六個值,其他都是自動轉為true

  • undefined
  • null
  • -0
  • 0+0
  • NaN
  • ''(空字元串)

*當JavaScript遇到預期為字元串的地方,就會將非字元串的數據自動轉為字元串。系統內部會自動調用String函數。

字元串的自動轉換,主要發生在加法運算時。當一個值為字元串,另一個值為非字元串,則後者轉為字元串。

 

*當JavaScript遇到預期為數值的地方,就會將參數值自動轉換為數值。系統內部會自動調用Number函數。

除了加法運算符有可能把運運算元轉為字元串,其他運算符都會把運運算元自動轉成數值。

一元運算符也會把運運算元轉成數值。

+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0

  


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

-Advertisement-
Play Games
更多相關文章
  • Problem 1 - Time Limit : 1s Memory Limit : 512M Code Limit : 128KDescription我們定義階乘N!=1×2×3×...×N,並且0!=1。現在我們想知道對於N!的階乘結尾總共有多少個0。Input一行一個整數N。Output0的個 ...
  • ...
  • 實現多態的前提 1。 要有繼承 2。 要有方法重寫,沒有也可以,但是沒有的話 就沒有意義 3。 要有父類引用 指向子類對象 如: 父類 f=new 子類(); * 多態中的成員訪問特點 * A, 成員變數 編譯看左邊, 運行看左邊 * B, 構造方法 創建子類對象的時候,,訪問 父類的構造方法, 對 ...
  • 推薦大家可以看看這個:http://wenku.baidu.com/link?url=RQU2exzV_EF3GATc3bzQU2o9LGMuCmiN5nUJth5SLG3E2TrxtBLQodJU_kZgfJjd9ljtR5XhZlHdzoHJ6kLeAF4uC9dttM1sNer60lg09gS ...
  • 功能強大的 jQuery 表單驗證插件,適用於日常的 E-mail、電話號碼、網址等驗證及 Ajax 驗證,除自身擁有豐富的驗證規則外,還可以添加自定義的驗證規則。 相容 IE 6+, Chrome, Firefox, Safari, Opera 10+ 版本: jQuery v1.7+ jQuer ...
  • CSS不像其它高級語言一樣支持算術運算、變數、流程式控制制與面向對象特性,所以CSS樣式較多時會引起一些問題,如修改複雜,冗餘,某些別的語言很簡單的功能實現不了等。而javascript則是一種半面向對象的動態語言,有java的影子,有C的味道,中間有比其它語言多的糟粕,使用預處理辦法可以解決這些問題。 ...
  • 本文主要說明Json的基本概念,和一個在Html中使用Json給元素賦值的小例子,屬於基礎性信息 什麼是 JSON ? JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation) JSON 是輕量級的文本數據交換格式 JSON 獨立於語言 * JSON ...
  • 1、typeof 用來檢測數據類型的運算符 typeof value 返回值首先是一個字元串,其次裡面包含了對應的數據類型,例如:"number"、"string"、"boolean"、"undefined"、"object"、"function" 局限性:1)typeof null ->"obje ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...