摘要:當轉換后的原始數據類型為類型或者類型,則繼續轉換成類型。具體流程圖如下備注的數據類型可以分為以下兩種原始數據類型才引入的引用類型類型類型轉換成類型的規則類型類型標準的數字格式如果是標準的數字格式,轉換成類型相比不用多說,比如下面這幾個栗子
拋磚引玉
按照正常的邏輯來說,我們判斷兩個值是否相等會遵循以下規則:
但是我看下面一組值:
[]==0 //true []==false //true []==!{} //true [10]==10 //true "0"==false //true ""==0 //true undefined==null //true !null==true //true
居然沒有按照我們的劇本走,那它比較規則又是什么?下面我就來分析一波。
首先我們先去ECMAScript5.1中文版( http://lzw.me/pages/ecmascrip... )找一下“==”的比較規則,如下:
1.若Type(x)與Type(y)相同, 則 a.若Type(x)為Undefined, 返回true。 b.若Type(x)為Null, 返回true。 c.若Type(x)為Number, 則 i.若x為NaN, 返回false。 ii.若y為NaN, 返回false。 iii.若x與y為相等數值, 返回true。 iv.若x 為 +0 且 y為?0, 返回true。 v.若x 為 ?0 且 y為+0, 返回true。 vi返回false。 d.若Type(x)為String, 則當x和y為完全相同的字符序列(長度相等且相同字符在相同位置)時返回true。 否則, 返回false。 e.若Type(x)為Boolean, 當x和y為同為true或者同為false時返回true。 否則, 返回false。 f.當x和y為引用同一對象時返回true。否則,返回false。 2.若x為null且y為undefined, 返回true。 3.若x為undefined且y為null, 返回true。 4.若Type(x) 為 Number 且 Type(y)為String, 返回comparison x == ToNumber(y)的結果。 5.若Type(x) 為 String 且 Type(y)為Number,返回比較ToNumber(x) == y的結果。 6.若Type(x)為Boolean, 返回比較ToNumber(x) == y的結果。 7.若Type(y)為Boolean, 返回比較x == ToNumber(y)的結果。 8.若Type(x)為String或Number,且Type(y)為Object,返回比較x == ToPrimitive(y)的結果。 9.若Type(x)為Object且Type(y)為String或Number, 返回比較ToPrimitive(x) == y的結果。 10.返回 false
看完ECMAScript5.1中文版的介紹之后,相信很多小伙伴的心情應該是這樣的:
別看上面說的有點花里胡哨的,其實我們可以用很簡單的話來總結出來。由于本篇文章核心是“==”是如何進行類型轉換,我就總結一下類型不同的情況下“==”是如何比較的。
當數據類型為Boolean類型或者String類型時,比較時需要轉換成Number類型。
當數據類型為引用類型時,需要轉換成原始數據類型。當轉換后的原始數據類型為Boolean類型或者String類型,則繼續轉換成Number類型。
undefined和null跟任何值在“==”下都返回false,但二者在“==”下返回true。
具體流程圖如下:
備注:
Javascript的數據類型可以分為以下兩種:
原始數據類型(null、undefined、Number、String、Boolean、Symbol(Es6才引入的))
引用類型 (Object)
Boolean類型、String類型轉換成Number類型的規則(ToNumber) Boolean類型Boolean | Number |
---|---|
true | 1 |
false | 0 |
如果是標準的數字格式,轉換成Number類型相比不用多說,比如下面這幾個栗子
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103433.html
摘要:所以,我們這個小游戲發布以后,我們就開始花了很多很多時間來打擊外掛。二距離判斷像素點判斷該方法采用自目前最火的跳一跳小游戲輔助程序。 作者:Hahn, 騰訊高級UI工程師商業轉載請聯系騰訊WeTest獲得授權,非商業轉載請注明出處。 原文鏈接:http://wetest.qq.com/lab/view/364.html WeTest 導讀 張小龍:這個游戲發布以后,其實它的效果有點超...
摘要:下面來逐步的解析圖里的流程。一將事務放進隊列中這里的可以傳也可以傳它會產生新的以一種的方式跟舊的進行合并。如果當前不在更新過程的話,則執行更新事務。以上即為的實現過程,最后還是用一個流程圖在做一個總結吧參考文檔 前言 學過react的人都知道,setState在react里是一個很重要的方法,使用它可以更新我們數據的狀態,本篇文章從簡單使用到深入到setState的內部,全方位為你揭開...
摘要:對象的引用關鍵字總是指向調用該方法的對象。根據出現位置的不同,作為對象的默認引用有兩種情形。構造器中引用該構造器正在初始化的對象。如果同一個類中包含了兩個或兩個以上方法的方法名相同,但形參列表不同,則被稱為方法重載。 類和對象 定義類 面向對象的程序設計過程中有兩個重要概念:類(class)和對象(object,也被稱為實例,instance),其中類是某一批對象的抽象,可以把類理解成...
摘要:第二篇文章將深入谷歌的引擎的內部。引擎可以實現為標準解釋器,或者以某種形式將編譯為字節碼的即時編譯器。這個引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復雜的優化編譯器,生成高度優化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運行時和調用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內部。 想閱讀更多優質文章請猛戳GitHu...
閱讀 2570·2021-11-23 09:51
閱讀 3120·2019-08-30 15:54
閱讀 1071·2019-08-30 14:14
閱讀 3542·2019-08-30 13:59
閱讀 1393·2019-08-29 17:09
閱讀 1468·2019-08-29 16:24
閱讀 2848·2019-08-29 15:43
閱讀 911·2019-08-29 12:45