摘要:例如兩個引用類型判斷兩者之間的引用路徑。布爾值與數(shù)字比較時,布爾值轉(zhuǎn)化成數(shù)字值,二者再進行比較。根據(jù)運算符的優(yōu)先級,先執(zhí)行,直接轉(zhuǎn)化為布爾值空字符串,,,都是,其余都是再取反,故轉(zhuǎn)化為。最后,故結(jié)果為。
兩個操作數(shù)之間的 " == " 與 " === "
1、 兩個不同的基本數(shù)據(jù)類型: 如果兩個基本數(shù)據(jù)類型(Number、String、Boolean、Null、Undefined)不同,會將它們進行數(shù)據(jù)類型轉(zhuǎn)化,再進行比較。例如:
0 == "" // true 0 == "0" // true 1 == "1" // true "0" == "" // false false == 0 // true false == "0" // true false == "false" // false false == null // false true == null // false false == undefined // false true == undefined // false null == undefined // true NaN == NaN // false 0 === "" // false 0 === "0" // false 1 === "1" // false false === "0" // false null === undefined // false [] == false // true ![] == false // true ![] == [] // true ![] === [] // false null === document.getElementById("ABC") // true(document.getElementById("ABC") 不存在)
2、 基本數(shù)據(jù)類型與引用數(shù)據(jù)類型: 將引用數(shù)據(jù)類型(function、object,其中object包含array)轉(zhuǎn)化(后臺自動調(diào)用 Object.prototype.valueOf() )為它的原始值,再進行比較。例如:
[1,2] == "0" // true function(){return ["1,2"]}() == "1,2" // true [1,2] === "0" // false function(){return ["1,2"]}() === "1,2" // false
3、 兩個引用類型: 判斷兩者之間的引用路徑。例如:
[1,2] == [1,2] // false [1,2] === [1,2] // false總結(jié)
1、" == " 情況
一般轉(zhuǎn)化規(guī)則:(對象 => 字符串 => 數(shù)字值) 或 (布爾值 => 數(shù)字值)
(1)字符串與數(shù)字比較時,字符串轉(zhuǎn)化成數(shù)字值,二者再進行比較。
(2)布爾值與數(shù)字比較時,布爾值轉(zhuǎn)化成數(shù)字值,二者再進行比較。
(3)字符串與布爾值比較時,二者全部轉(zhuǎn)化成數(shù)字值再進行比較。
(4)對象與數(shù)字比較時,對象先轉(zhuǎn)化成字符串,然后再轉(zhuǎn)化成數(shù)字值,與數(shù)字值進行比較。
(5)對象與字符串比較時,對象轉(zhuǎn)化成字符串,然后二者再進行比較。
(6)對象和布爾值比較時,對象先轉(zhuǎn)化成字符串,然后再轉(zhuǎn)化成數(shù)字值,布爾值直接轉(zhuǎn)化為數(shù)字,二者再進行比較。
(7)null 與 undefined 二者相等,不能把二者轉(zhuǎn)化為其他值,二者與其他值比較返回 false。
(8)![] == []。(根據(jù)運算符的優(yōu)先級,! 先執(zhí)行,直接轉(zhuǎn)化為布爾值(空字符串,NaN,0,null,undefined 都是 fasle,其余都是 true)再取反,故![] 轉(zhuǎn)化為 false。其余依照以上規(guī)則轉(zhuǎn)化。最后 0 == 0,故結(jié)果為 true。)
2、" === " 情況
(1)兩個值類型不同,就返回 fasle 。
(2)兩個值都是數(shù)值,并且是同一個值,那么為 true,另外:如果其中至少一個是NaN,那么為 fasle。(判斷一個值是否是 NaN,只能使用 isNaN() 來判斷);
(3)兩個值都是字符串,每個位置的字符都一樣,那么 true,否則 fasle。
(4)兩個值都引用同一個對象或函數(shù),那么為true;否則 fasle。
(5)兩個值都是 true 或 fasle,那么 true,否則 fasle。
(6)兩個值都是null 或 undefined,那么為true;否則 fasle。
結(jié)論:推薦使用 “===”, 只要類型不一致,直接返回 fasle;“==” 會造成類型轉(zhuǎn)換再進行比較, 不嚴謹。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106318.html
摘要:是全局對象的一個屬性,當聲明了一個變量而未初始化時,得到的就是。作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。作為對象原型鏈的終點。表示缺少值,此處應該有值,但未定義。因此和的值相等而類型不相等。數(shù)字運算不相同這是由于約定的不同所決定的。 對于undefined和null我一直知道他們有很多區(qū)別,也知道一點關(guān)于他們的區(qū)別,但卻不具體系統(tǒng),因此總結(jié)了一下,主要心得如下: 我們要區(qū)分它們,首先...
摘要:前端工作面試問題備注本包含了一些前端面試問題用于考查候選者。不建議對單個候選者問及每個問題那需要好幾個小時。列舉不同的清除浮動的技巧,并指出它們各自適用的使用場景。選擇器字符串,字符串,回調(diào)函數(shù),元素,對象,數(shù)組,元素數(shù)組,對象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:前端工作面試問題備注本包含了一些前端面試問題用于考查候選者。不建議對單個候選者問及每個問題那需要好幾個小時。列舉不同的清除浮動的技巧,并指出它們各自適用的使用場景。選擇器字符串,字符串,回調(diào)函數(shù),元素,對象,數(shù)組,元素數(shù)組,對象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:前端工作面試問題備注本包含了一些前端面試問題用于考查候選者。不建議對單個候選者問及每個問題那需要好幾個小時。列舉不同的清除浮動的技巧,并指出它們各自適用的使用場景。選擇器字符串,字符串,回調(diào)函數(shù),元素,對象,數(shù)組,元素數(shù)組,對象等。 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions 前端工作面...
摘要:示例下方提供了一個數(shù)組,如果我們想將其中的每一個元素翻倍,我們可以使用和來達到目的。注意,是不會返回有意義的值的。允許更改原始數(shù)組的元素。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認可。 譯者按: 慣用Haskell的我更愛map。 原文: JavaScript?—?Map vs. ForEach - What’s the difference bet...
摘要:目前,和基本是同義的,只有一些細微的差別。表示沒有對象,即該處不應該有值。作為對象原型鏈的終點。五新增持續(xù)更新中一般是意外情況產(chǎn)生的,則是有意為對象賦值來說明這是一個空的對象的返回值是的類型是 摘自阮一峰博客,另附自己的理解分析。 大多數(shù)計算機語言,有且僅有一個表示無的值,比如,C語言的NULL,Java語言的null,Python語言的None,Ruby語言的nil。有點奇怪的是,J...
閱讀 1476·2021-11-22 14:44
閱讀 2851·2021-11-16 11:44
閱讀 3219·2021-10-13 09:40
閱讀 2013·2021-10-08 10:04
閱讀 2374·2021-09-24 10:28
閱讀 2922·2021-09-06 15:02
閱讀 2971·2019-08-30 15:52
閱讀 2409·2019-08-30 13:20