不同數據類型做比較的時候,都需要進行數據類型的轉換!本文介紹常見數據類型轉換的方法,相等和嚴格相等的判斷規律
一、其他類型轉換成布爾類型 1、使用場景:對于括號里的表達式,會被強制轉換為布爾類型
if ("") { console.log("empty") }2、轉換規則
類型 | 結果 |
---|---|
Undefined | false |
Null | false |
Number | +0, ?0, 或者 NaN 為 false, 其他為 true |
String | 空字符串為 false,其他都為 true |
Object | true |
if ("hello") { console.log("hello") } //hello // 題目2:如下代碼輸出什么? if ("") { console.log("empty") } //undefined // 題目3:如下代碼輸出什么? if (" ") { console.log("blank") } //blank // 題目4:如下代碼輸出什么? if (+0.00) { console.log("blank") } //undefined4、小建議
寫代碼以后不要寫成下面這樣,不要再if內放變量。變量轉換成布爾類型,會有很多狀態。可以寫成判斷類型的語句如(a==="")。
if(a){
console.log("blank")
}
判斷是否相等==
2、轉換規則類型 | 結果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 , ""->0 , " "->0 空字符串和含有空白字符串的字符都為0 |
Object | 先調用 .valueOf 方法獲取結果。如果沒定義,再嘗試調用 .toString方法獲取結果(數據運算符那篇文章有詳細介紹) |
經驗就是把雙方轉換成數字
1、轉換規則類型 | 結果 | 結果 |
---|---|---|
Undefined | Null | true 特例記住 undefined == null |
Number | any | x == toNumber(y)數字和任何數據相比,把其他數據轉換成數字在比較 |
Boolean | (any) | toNumber(x) == y 只要布爾類型先轉換成數字,再比較 |
Object | String or Number | toPrimitive(x) == y 對象(這里指廣義的對象,包括數組和函數)與原始類型的值比較時,對象轉換成原始類型的值,再進行比較。 |
otherwise | otherwise | false |
"" == 0 // true false " " == 0 //true "" == true //false " " == true //false !" " == true // false ,(!" "就是布爾類型的false) "hello" == true //false "hello"轉換成數字為nan,true轉換成數字1 "0" == false //true "00" == false //true "0.00" == false //true undefined == null //true true== {} //false {}調用tostring為[object Object] [] == true //false 對象的toString方法默認返回[object Object] var obj = { a: 0, valueOf: function(){return 1} } obj == "[object Object]" // false 自定義valueof之后,對象轉換數字返回的是1四、嚴格相等 1、不同類型的值
如果兩個值的類型不同,直接返回false
2、復合類型值兩個復合類型(對象、數組、函數)數據比較時,不是比較它們的值是否相等,而是比較它們是否指向同一個地址。如果兩個變量引用同一個對象,則它們相等。
var v1 = {}; var v2 = v1; v1 === v2 // true
反例
{} === {} // false [] === [] // false (function () {} === function () {}) // false //比較兩個空對象、兩個空數組、兩個空函數,結果都是不相等。 //原因是對于復合類型的值,嚴格相等運算比較的是,它們是否引用同一個內存地址, //而運算符兩邊的空對象、空數組、空函數的值,都存放在不同的內存地址,結果當然是false3、特例
例子1:NaN與任何值都不相等(包括自身)
NaN == NaN // false NaN === NaN // false
例子2:正0等于負0
+0 === -0 // true
例子3:undefined和null與自身嚴格相等
undefined === undefined // true null === null // true
var v1; var v2; v1 === v2 // true //由于變量聲明后默認值是undefined,因此兩個只聲明未賦值的變量是相等的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108632.html
摘要:包裝對象即,與數值字符串布爾值相對應的三個原生對象。顯示類型轉換強制轉換即,顯示調用函數進行類型轉換。返回對象的字符串數值或布爾值表示,通常與返回的值相同。 一、類型與包裝對象 1. 類型 原始類型: number string boolean null undefined Symbol 對象類型: Object Array Function 原始類型(基本類型)和對象類型(引...
摘要:看到下面的題,是不是已經蒙了,讀完這篇文章,就能順利通關了沒有輸出數據類型判斷數據類型數據類型一共有種,類型判斷特殊情況由此可以看出,不能區分數組,和對象運算符返回一個布爾值,表示對象是否為某個構造函數的實例。 前言 無論筆試還是面試,總會問到數據類型和隱式轉換。今天徹底整理一下這塊的知識,希望對大家有幫助。 看到下面的題,是不是已經蒙了,讀完這篇文章,就能順利通關了 console....
摘要:隱式強制類型轉換隱式強制類型轉換指的是一些特殊的操作的副作用來實現類型轉換,而非和等函數來實現值的類型轉換。下面幾種情況會發生布爾值的強制類型轉換語句中的天健判斷表達式。 引言 來到北京已經有4個年頭了,做過一些測試、打雜、前端的工作之后,最后還是選擇了前端的工作。現階段主要還是在寫業務代碼,代碼質量,工作效率就顯得尤為重要。【學以致用】這個系列主要記錄一些平時工作、學習遇到的一些問題...
摘要:引用數據類型引用數據類型值指保存在堆內存中的對象。訪問方式是按引用訪問。數據類型檢測操作符是檢測基本類型的最佳工具。未定義布爾值字符串數值對象或函數用于檢測引用類型,可以檢測到它是什么類型的實例。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:數據類型 回味,無窮! 數據類型定義 數據類型分類 基本數據...
摘要:原始類型分別有類型類型和類型三種。類型中存在一個特殊的值叫。也可以把其他類型的數據自動轉換為類型運算符運算符判斷原始類型語法結構變量名稱。 數據類型 1.數據類型的概述;在JavaScript代碼中,能夠表示并且操作值的類型就叫做數據類型數據類型可以分成可變類型和不可變類型,可變類型的值是可以修改的。相反不可變類型的值是不可以修改的。數據類型還有原始類型(原始值)與引用類型(內置對象)...
閱讀 2843·2023-04-25 20:02
閱讀 1443·2021-11-11 16:55
閱讀 629·2021-09-26 09:46
閱讀 6214·2021-09-22 15:55
閱讀 1827·2021-08-09 13:41
閱讀 1580·2019-08-30 15:52
閱讀 2376·2019-08-30 14:13
閱讀 3298·2019-08-26 13:48