摘要:當(dāng)轉(zhuǎn)換后的原始數(shù)據(jù)類型為類型或者類型,則繼續(xù)轉(zhuǎn)換成類型。具體流程圖如下備注的數(shù)據(jù)類型可以分為以下兩種原始數(shù)據(jù)類型才引入的引用類型類型類型轉(zhuǎn)換成類型的規(guī)則類型類型標(biāo)準(zhǔn)的數(shù)字格式如果是標(biāo)準(zhǔn)的數(shù)字格式,轉(zhuǎn)換成類型相比不用多說,比如下面這幾個(gè)栗子
拋磚引玉
按照正常的邏輯來說,我們判斷兩個(gè)值是否相等會(huì)遵循以下規(guī)則:
但是我看下面一組值:
[]==0 //true []==false //true []==!{} //true [10]==10 //true "0"==false //true ""==0 //true undefined==null //true !null==true //true
居然沒有按照我們的劇本走,那它比較規(guī)則又是什么?下面我就來分析一波。
首先我們先去ECMAScript5.1中文版( http://lzw.me/pages/ecmascrip... )找一下“==”的比較規(guī)則,如下:
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為相等數(shù)值, 返回true。 iv.若x 為 +0 且 y為?0, 返回true。 v.若x 為 ?0 且 y為+0, 返回true。 vi返回false。 d.若Type(x)為String, 則當(dāng)x和y為完全相同的字符序列(長(zhǎng)度相等且相同字符在相同位置)時(shí)返回true。 否則, 返回false。 e.若Type(x)為Boolean, 當(dāng)x和y為同為true或者同為false時(shí)返回true。 否則, 返回false。 f.當(dāng)x和y為引用同一對(duì)象時(shí)返回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)的結(jié)果。 5.若Type(x) 為 String 且 Type(y)為Number,返回比較ToNumber(x) == y的結(jié)果。 6.若Type(x)為Boolean, 返回比較ToNumber(x) == y的結(jié)果。 7.若Type(y)為Boolean, 返回比較x == ToNumber(y)的結(jié)果。 8.若Type(x)為String或Number,且Type(y)為Object,返回比較x == ToPrimitive(y)的結(jié)果。 9.若Type(x)為Object且Type(y)為String或Number, 返回比較ToPrimitive(x) == y的結(jié)果。 10.返回 false
看完ECMAScript5.1中文版的介紹之后,相信很多小伙伴的心情應(yīng)該是這樣的:
別看上面說的有點(diǎn)花里胡哨的,其實(shí)我們可以用很簡(jiǎn)單的話來總結(jié)出來。由于本篇文章核心是“==”是如何進(jìn)行類型轉(zhuǎn)換,我就總結(jié)一下類型不同的情況下“==”是如何比較的。
當(dāng)數(shù)據(jù)類型為Boolean類型或者String類型時(shí),比較時(shí)需要轉(zhuǎn)換成Number類型。
當(dāng)數(shù)據(jù)類型為引用類型時(shí),需要轉(zhuǎn)換成原始數(shù)據(jù)類型。當(dāng)轉(zhuǎn)換后的原始數(shù)據(jù)類型為Boolean類型或者String類型,則繼續(xù)轉(zhuǎn)換成Number類型。
undefined和null跟任何值在“==”下都返回false,但二者在“==”下返回true。
具體流程圖如下:
備注:
Javascript的數(shù)據(jù)類型可以分為以下兩種:
原始數(shù)據(jù)類型(null、undefined、Number、String、Boolean、Symbol(Es6才引入的))
引用類型 (Object)
Boolean類型、String類型轉(zhuǎn)換成Number類型的規(guī)則(ToNumber) Boolean類型Boolean | Number |
---|---|
true | 1 |
false | 0 |
如果是標(biāo)準(zhǔn)的數(shù)字格式,轉(zhuǎn)換成Number類型相比不用多說,比如下面這幾個(gè)栗子
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/103433.html
摘要:所以,我們這個(gè)小游戲發(fā)布以后,我們就開始花了很多很多時(shí)間來打擊外掛。二距離判斷像素點(diǎn)判斷該方法采用自目前最火的跳一跳小游戲輔助程序。 作者:Hahn, 騰訊高級(jí)UI工程師商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系騰訊WeTest獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 原文鏈接:http://wetest.qq.com/lab/view/364.html WeTest 導(dǎo)讀 張小龍:這個(gè)游戲發(fā)布以后,其實(shí)它的效果有點(diǎn)超...
摘要:下面來逐步的解析圖里的流程。一將事務(wù)放進(jìn)隊(duì)列中這里的可以傳也可以傳它會(huì)產(chǎn)生新的以一種的方式跟舊的進(jìn)行合并。如果當(dāng)前不在更新過程的話,則執(zhí)行更新事務(wù)。以上即為的實(shí)現(xiàn)過程,最后還是用一個(gè)流程圖在做一個(gè)總結(jié)吧參考文檔 前言 學(xué)過react的人都知道,setState在react里是一個(gè)很重要的方法,使用它可以更新我們數(shù)據(jù)的狀態(tài),本篇文章從簡(jiǎn)單使用到深入到setState的內(nèi)部,全方位為你揭開...
摘要:本書主要圍繞一系列逐漸復(fù)雜的程序問題,以及用以解決這些問題的語言特性展開講解。你不只學(xué)到的函數(shù)和結(jié)構(gòu),也會(huì)學(xué)習(xí)到它們的設(shè)計(jì)目的和基本原理。因此我們把精力集中在最有價(jià)值的地方。本書不僅是對(duì)模板的權(quán)威解釋,而且本書還深入地介紹了其他一般的思想。 C++ 入門教程(41課時(shí)) - 阿里云大學(xué) C+...
摘要:對(duì)象的引用關(guān)鍵字總是指向調(diào)用該方法的對(duì)象。根據(jù)出現(xiàn)位置的不同,作為對(duì)象的默認(rèn)引用有兩種情形。構(gòu)造器中引用該構(gòu)造器正在初始化的對(duì)象。如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法的方法名相同,但形參列表不同,則被稱為方法重載。 類和對(duì)象 定義類 面向?qū)ο蟮某绦蛟O(shè)計(jì)過程中有兩個(gè)重要概念:類(class)和對(duì)象(object,也被稱為實(shí)例,instance),其中類是某一批對(duì)象的抽象,可以把類理解成...
摘要:第二篇文章將深入谷歌的引擎的內(nèi)部。引擎可以實(shí)現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將編譯為字節(jié)碼的即時(shí)編譯器。這個(gè)引擎是在谷歌中使用的,但是,與其他引擎不同的是也用于流行的。一種更復(fù)雜的優(yōu)化編譯器,生成高度優(yōu)化的代碼。不是唯一能夠做到的引擎。 本系列的 第一篇文章 主要介紹引擎、運(yùn)行時(shí)和調(diào)用堆棧。第二篇文章將深入谷歌 V8 的JavaScript引擎的內(nèi)部。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHu...
閱讀 2576·2021-11-23 09:51
閱讀 3125·2019-08-30 15:54
閱讀 1077·2019-08-30 14:14
閱讀 3549·2019-08-30 13:59
閱讀 1407·2019-08-29 17:09
閱讀 1470·2019-08-29 16:24
閱讀 2853·2019-08-29 15:43
閱讀 916·2019-08-29 12:45