Javascript 中 和 區別是什麼?

時間 2021-05-05 19:20:34

1樓:張匆匆

==,值相等就行。

===,值和型別都相等。

舉個例子"2"==2,true;"2"===2,false

2樓:

以下內容來自ECMAScript2018官方定義和Kyle Simpson的課程。

一句話區別:==允許type coercion, ===不允許.

大多數情況下用==比===更好,大部分人用===而不用==是因為不了解==的執行原理或不完全了解function的輸入資料型別,正確的辦法不應該是用===。

==的演算法:

== (a, b)

若a, b的type相同,則執行 a === b

若a, b的type都屬於,return true

若a、b中乙個Number, 乙個String,則對String執行ToNumber()操作,再進行==操作。

若a、b中有Boolean,對Boolean執行ToNumber()操作,再進行==操作

若a、b中乙個屬於, 另乙個是Object,則對Object執行ToPrimitive(),再進行==操作

返回false

===的演算法:

=== (a, b)

若a, b的type不同,則return false

若a是Number,則

若 a或b是NaN, return false.

若a, b數值相等,return true.

若a,b乙個為+0, 乙個為-0,return true

Return false.

Return SameValueNonNumber(x, y).

關於ToNumber, ToPrimitive, SameValueNonNumber等函式又有相關定義,具體到官方文件頁面https://www.

ecma-international.org/

ecma-262/9.0/

搜尋即可。

例項分析:

==!// true

!優先順序最高,!函式需要boolean型輸入,則對右邊的進行ToBoolean()操作:

=>== !Boolean() // Boolean() -> true,因為不是falsy value

== !true

== false

進行==演算法,依次判斷條件,判斷到4符合條件,對Boolean false執行ToNumber

== Number(false) // Number(false) -> 0 原因查ECMA官方 ToNumber()演算法

== 0

進行==演算法,依次判斷條件,判斷到5符合條件,對Object 執行ToPrimitive

ToPrimitive() == 0 // ToPrimitive先執行ValueOf,返回還是,不是primitive,再嘗試ToString,得到""

"" == 0

進行==演算法,依次判斷條件,判斷到3符合條件,對""執行ToNumber()

Number("") == 0 // Number("") -> 0

0 == 0

進行==演算法,依次判斷條件,判斷到1符合條件,執行0 === 0操作

0 === 0

進行===演算法,依次判斷條件,判斷到2.2符合條件,對比數值,數值相等,返回true

true

3樓:嚴駿

當你在快速實現想法的時候,用==去相容一些意外情況,一般最多的是相容數字和數字字元,然後後續再繞回來的時候,再來確定,這裡到底是什麼型別,然後轉換成===。

4樓:無限迴圈

[1,2] =='1,2';//true

內部呼叫Object原型上的valueOf();

兩者的值都是不變的。怎麼就雙等於了。

兩者在轉換了資料型別以後,值明顯不一樣嘛

5樓:一凡先生

反正我被公司的 == === 搞的好煩了,盡量避免 === 吧,弱型別語音就是要弱化變數的型別,何必要搞的那麼坑爹當強型別來使用。

6樓:

三等成立是值和型別都一樣。

雙等成立是值一樣就行。

資料由值和型別構成。

以上用於一般的比較。但是NaN和無窮還有空值,未定義,我還沒探索。

7樓:

場景一:你向女神表白,女神說:0點見;

場景二:你向女神表白,女神說不,轉身離開了。

使用 == 的時候,JS 告訴你這兩個場景結果是一樣的。

這不是坑爹嗎?

8樓:龍騰道默默地

不會。不會對比較變數本身產生形象(除非toString或valueOf方法被覆寫成特定用途了)。

不推薦的原因是其邏輯比較難懂,容易疏忽出錯。

——括號的例子:

a={};

a.toString=function();

a.valueOf=function();

a==0;//自動依次觸發了以上兩個函式

alert(a);//已經是1

9樓:

null==undefined

null===undefined

===是強相等,確實推薦使用

至於那麼多無聊的原因,有必要嗎?

10樓:

首先,== equality 等同,=== identity 恒等。

==, 兩邊值型別不同的時候,要先進行型別轉換,再比較。

===,不做型別轉換,型別不同的一定不等。

==操作符:

如果兩個值具有相同型別,會進行===比較,返回===的比較值

如果兩個值不具有相同型別,也有可能返回true

如果乙個值是null另乙個值是undefined,返回true

如果乙個值是string另個是number,會把string轉換成number再進行比較

如果乙個值是true,會把它轉成1再比較,false會轉成0

如果乙個值是Object,另乙個是number或者string,會把Object利用 valueOf()或者toString()轉換成原始型別再進行比較

===操作符:

要是兩個值型別不同,返回false

要是兩個值都是number型別,並且數值相同,返回true

要是兩個值都是stirng,並且兩個值的String內容相同,返回true

要是兩個值都是true或者都是false,返回true

要是兩個值都是指向相同的Object,Arraya或者function,返回true

要是兩個值都是null或者都是undefined,返回true

11樓:

「雙等號會造成型別轉換,推薦一律使用三等號」

這明顯是不對的吧!

1、對於string,number等基礎型別,==和===是有區別的

1)不同型別間比較,==之比較「轉化成同一型別後的值」看「值」是否相等,===如果型別不同,其結果就是不等

2)同型別比較,直接進行「值」比較,兩者結果一樣2、對於Array,Object等高階型別,==和===是沒有區別的

進行「指標位址」比較

守中和中庸有區別嗎?如果有他們分別是指什麼?

草根劉 這若僅從字語意上大致一致,而若從實用角度還為稍有區別的。先一種情形為有些時後候我們可能並拿不準和確不定事情的對錯和適用標準 或雖知對錯和標準卻礙於面子和其它不得已緣由,而不宜直接挑破道白,從而以免事情矛盾激化釀成不良後患 而這時只宜守中和,即有和稀緩衝之意,那這也為迫不得已從大局受益避害效果...

日語中 和 有什麼區別?

恁時相見早留心 要想詳細區分這兩個還是不難的,就筆者比較懶直接從日本雅虎截圖來回答 請看圖。第一次傳圖不知道怎麼排序,有懂的朋友請多多指教。 構造 木造 軽量鉄骨造 構造 建物 呼 防音性 構造 劣 木造 軽量鉄骨造 建物 上下 防音 配慮敷 物件 比較的結露 発生 構造 的 敬遠 傾向 最近 建物...

音標中, 和 有什麼區別?

徐漸 國際音標用方括號 表示音素,用雙斜槓 表示音位。乙個音位,是一種語言中若干個發音方式及聽感差別較小 互補 不具有對立性和區別意義的音素的集合。這些音素稱為這個音位的 音位變體 例如漢語的湘方言,不區分舌面中鼻音 n 和舌面中邊音 l 並且這兩個音區別也較小,所以在湘方言中,n 和 l 可以標記...