摘要:在上面代碼中調(diào)用方法返回的是自身方法字符串,因此和都成立。我們還可以對的方法進(jìn)行重寫加減規(guī)則為先求兩側(cè)表達(dá)式原始值若其中一個(gè)為字符串,返回字符串合并兩側(cè)表達(dá)式轉(zhuǎn)化為數(shù)字類型進(jìn)行運(yùn)算還有一些特殊情況
先看一段代碼,執(zhí)行結(jié)果有些奇怪,a>=b同時(shí)a<=b但是a!=b。
var a = function() {}; var b = function() {}; a == b // false a != b // true a >= b // true a <= b // true
這涉及到j(luò)s中操作符引起的類型轉(zhuǎn)換。
全等于(==)ES規(guī)范中==的判斷流程為:
1.ReturnIfAbrupt(x)
2.ReturnIfAbrupt(y)
3.如果Type(x)與 Type(y)相同,返回x===y
4.如果x為null,y為undefined,返回true
5.如果x為undefined,y為null,返回true
6.如果Type(x)是Number,Type(y)是String,返回x == ToNumber(y)
7.如果Type(x)是String,Type(y)是Number,返回ToNumber(x) == y
8.如果Type(x)是Boolean,返回ToNumber(x) == y
9.如果Type(y)是Boolean,返回x == ToNumber(y)
10.如果Type(x)是String、Number或者Symbol,Type(y)是Object,返回x == ToPrimitive(y)
11.如果Type(x)是Object,Type(y)是String、Number或者Symbol,返回ToPrimitive(x)==y
12.返回false
ReturnIfAbrupt判斷參數(shù)是否正常值,如有報(bào)錯(cuò),中斷執(zhí)行;Type函數(shù)相當(dāng)于typeOf操作符結(jié)果;ToPrimitive返回參數(shù)的原始值,在全等于操作符中返回對象依次嘗試調(diào)用valueOf或者toString方法的結(jié)果,直到結(jié)果為非對象
總結(jié)一下就是:
1、如果兩側(cè)參數(shù)類型相同,使用嚴(yán)格等于比較;
2、null與undefined兩兩相等;
3、若有布爾類型則轉(zhuǎn)化為數(shù)字;
4、字符串和數(shù)字比較時(shí)把字符串轉(zhuǎn)化為數(shù)字,進(jìn)入1;
5、Object類型與Number、String、Symbol類型比較時(shí),使用Object對象的原始值進(jìn)行比較
6、其他情況返回false
在上面代碼中a和b的類型都是“function”,應(yīng)使用嚴(yán)格等于進(jìn)行比較,它們有不同的引用并不是同一個(gè)值,所以結(jié)果為false
大于、小于(>、<)大于、小于首先使用valueOf方法對左右表達(dá)式求原始值,再進(jìn)行比較。在上面代碼中a、b調(diào)用valueOf方法返回的是自身方法字符串,因此>=和<=都成立。
我們還可以對a、b的valueOf方法進(jìn)行重寫
a.valueOf=function(){return 1;} b.valueOf=function(){return 2;} a > b // false a < b // true加、減(+、-)
規(guī)則為:
1、先求兩側(cè)表達(dá)式原始值
2、若其中一個(gè)為字符串,返回字符串合并
3、兩側(cè)表達(dá)式轉(zhuǎn)化為數(shù)字類型進(jìn)行運(yùn)算
還有一些特殊情況:
Infinity-Infinity // NaN Infinity+Infinity // Infinity -Infinity+(-Infinity) // -Infinity +0+0 // +0 +0+(-0) // +0 -0+(-0) // -0 +5+(-5) // +0
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105448.html
摘要:即在這個(gè)隱式強(qiáng)制類型轉(zhuǎn)換中,即不會(huì)等于也不會(huì)等于。按照正常人類的腦回路,應(yīng)該是將先轉(zhuǎn)換為布爾值,然后再將兩個(gè)布爾值對比。為什么和就可以避開操作符的坑呢它們進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)的轉(zhuǎn)換規(guī)則又是怎樣的。 在js中,類型轉(zhuǎn)換是一個(gè)被非常多人詬病的地方。新手看了會(huì)發(fā)矇,老手看了會(huì)頭疼。 類型轉(zhuǎn)換,又成為強(qiáng)制類型轉(zhuǎn)換,主要區(qū)分為顯式強(qiáng)制類型轉(zhuǎn)換和隱式強(qiáng)制類型轉(zhuǎn)換 按我理解,類型轉(zhuǎn)換的意思就很明顯,就...
摘要:看下面的代碼和會(huì)對操作數(shù)執(zhí)行條件判斷,如果操作數(shù)不是布爾值,會(huì)先執(zhí)行類型轉(zhuǎn)換后再執(zhí)行條件判斷。大家記住這個(gè)規(guī)則布爾值如果與其他類型進(jìn)行抽象比較,會(huì)先用將布爾值轉(zhuǎn)換為數(shù)字再比較。 在上一篇中我們聊過了 JS 類型轉(zhuǎn)換的規(guī)則和我發(fā)現(xiàn)的一些常見書籍中關(guān)于類型轉(zhuǎn)換的一些小錯(cuò)誤,當(dāng)碰到顯示類型轉(zhuǎn)換的時(shí)候大家可以按照這些規(guī)則去拆解出答案。但 JS 中存在一些很隱晦的隱式類型轉(zhuǎn)換,這一篇就來談下我對...
摘要:我們首先了解一下中有關(guān)類型轉(zhuǎn)換的知識(shí)。新增類型拋出異常從列表可以明顯看到少了一個(gè)類型轉(zhuǎn)換為的規(guī)則。這里要強(qiáng)調(diào)一點(diǎn)第二個(gè)表達(dá)式?jīng)]有涉及到強(qiáng)制類型轉(zhuǎn)換。如果文中有錯(cuò)誤或者有某些強(qiáng)制轉(zhuǎn)換的情形沒有涉及到請及時(shí)留言告知,我會(huì)修改并補(bǔ)充進(jìn)去。 javascript是一門非常奇特的語言,它有時(shí)候奇特的會(huì)讓人懷疑人生。比如讓我們看一下下面的一些奇葩例子: false == 0 ...
摘要:隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來,此文將會(huì)介紹幾種常見的隱式類型轉(zhuǎn)換。 隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來,此文將會(huì)介紹幾種常見的隱式類型轉(zhuǎn)換。 加法操作符 轉(zhuǎn)換規(guī)則: ...
摘要:如何讓根據(jù)拆箱轉(zhuǎn)換,以及的隱式轉(zhuǎn)換,可以如下寫為什么計(jì)算機(jī)中所有的數(shù)據(jù)都是以二進(jìn)制存儲(chǔ)的,所以在計(jì)算機(jī)計(jì)算時(shí)要把數(shù)據(jù)先轉(zhuǎn)換成二進(jìn)制進(jìn)行計(jì)算,然后把計(jì)算結(jié)果轉(zhuǎn)換成十進(jìn)制。會(huì)存在精度丟失問題和的二進(jìn)制都是以無線循環(huán)的小數(shù)的二進(jìn)制的二進(jìn)制 本想著記筆記里,但是筆記里沒有分類,還是以文章的形式,當(dāng)個(gè)人總結(jié)吧,這一篇就當(dāng)作JS基礎(chǔ)篇的記錄吧,有修改的和新增的持續(xù)更新~ 關(guān)于JS的一些小技巧 1:...
摘要:可以將其他類型轉(zhuǎn)成字符串函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。提示空數(shù)組空對象轉(zhuǎn)換為布爾型也是。 在JS中數(shù)據(jù)類型轉(zhuǎn)換有兩種 相關(guān)資料參閱 官方ecma-5規(guī)范阮一峰老師類型轉(zhuǎn)換規(guī)范對相等==定義 強(qiáng)制類型轉(zhuǎn)換Number() Number函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt函數(shù)嚴(yán)格很多,只要有一個(gè)字符是非數(shù)字(空格、+、-除外),那么就會(huì)被轉(zhuǎn)為NaN。 showImg(http...
閱讀 1791·2021-11-11 11:02
閱讀 1697·2021-09-22 15:55
閱讀 2499·2021-09-22 15:18
閱讀 3500·2019-08-29 11:26
閱讀 3757·2019-08-26 13:43
閱讀 2656·2019-08-26 13:32
閱讀 912·2019-08-26 10:55
閱讀 973·2019-08-26 10:27