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