最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript相等運算符的九條規(guī)則示例詳解

 更新時間:2019年10月20日 09:55:04   作者:道奇  
這篇文章主要給大家介紹了關(guān)于JavaScript相等運算符的九條規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

簡介

Java的等號有=,==,===三個運算符雖然都讀成“等于”,但概念是不一樣的,=指的是賦值,在這篇文章中我們不會進(jìn)行更多的介紹;==稱為相等運算符,比較的是兩個操作數(shù)值是否相等;===稱為嚴(yán)格相等運算符,比較的是兩個操作數(shù)是否是“同一個值”。

針對相等運算符==和===,有兩個對應(yīng)的!=和!==運算符,這兩個不相等運算符的運算結(jié)果是==和===運算結(jié)果的相反值。

嚴(yán)格相等運算符

嚴(yán)格相等運算符在對操作數(shù)進(jìn)對比運算時,是不進(jìn)行類型轉(zhuǎn)換的。對比規(guī)則如下:

1. 操作數(shù)類型不同

對比結(jié)果是false

1 === "1" // false
true === "true" // false
undefined === true //false
1 === true //false

2.同一類原始類型值

如果兩個值都是原始類型值(數(shù)字、字符串、布爾值),值相同就返回true,值不同就返回false。

對于原始類型值,要注意的是,0和-0是相等的;如果兩個值是字符串,需要它們在16位編碼的相同位置上有相同的值才是相等。如果是不同的16位編碼序列,就算有相同的內(nèi)容,相同的長度,結(jié)果也是不相等。

'1' === '0' //false
1 === 0x1 // true

3.同是對象

如果兩個值是對象(數(shù)組、函數(shù)、對象、Symbol),對于兩個對象比較的是引用,如果引用指向的是不同的對象,則結(jié)果是不相等。

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false

var v1 = {};
var v2 = v1; //v2和v1指向同一個引用地址
v1 === v2 // true 

// 沒有參數(shù)的情況
let s1 = Symbol();
let s2 = Symbol();

s1 === s2 // false

// 有參數(shù)的情況
let s1 = Symbol('foo');
let s2 = Symbol('foo');
let s3 = s1;
s1 === s2 // false
s1 === s2 // true

4. null和undefined

如果兩個值都是null或者都是undefined,結(jié)果是true

null === null //true
undefined === undefined //true

5.NaN

如果兩個值都是NaN,結(jié)果是false

NAN === NAN //false

NaN和任何數(shù)字都不相等,包括它自身

相等運算符

1. 值的類型相同

應(yīng)用嚴(yán)格相等運算符轉(zhuǎn)換規(guī)則的值類型相同規(guī)則(除:操作數(shù)類型不同)。

2.不同原始類型值

如果是不同原始類型值(數(shù)字、字符串、布爾值)進(jìn)行比較,將非數(shù)字類型轉(zhuǎn)換成數(shù)字,再進(jìn)行比較。

0 == undefined //false
// 等同于 0 == Number(undefined)
// 等同于0 == NAN

0 == null //false
// 等同于 0 == Number(null)

1 == true // true
// 等同于 1 == Number(true)

'true' == true // false
// 等同于 Number('true') == Number(true)
// 等同于 NaN === 1

'' == 0 // true
// 等同于 Number('') == 0
// 等同于 0 == 0

'1' == true // true
// 等同于 Number('1') == Number(true)
// 等同于 1 == 1

'\n 123 \t' == 123 // true
// 因為字符串轉(zhuǎn)為數(shù)字時,省略前置和后置的空格

3. 對象和原始類型值

如果其中一個操作數(shù)是對象,另外一個是原始類型值(數(shù)字、字符串、布爾值),按如下規(guī)則轉(zhuǎn):

  • 將對象轉(zhuǎn)換成原始類型值
  • 轉(zhuǎn)換后的原始類型值與另一個操作數(shù)的類型一樣,使用值類型相同的規(guī)則
  • 如果不一樣,將非數(shù)字類型轉(zhuǎn)換成數(shù)字再進(jìn)行比較。

例1:對象對比數(shù)字

[1] == 1 //true

解析:

a. [1]先轉(zhuǎn)換成原始值"1";

b. 轉(zhuǎn)換后與右邊的操作數(shù)1類型不一樣,將"1"轉(zhuǎn)換成1;

c. 1 == 1 結(jié)果是true

例2:對象對比字符串

[1] == "1"

解析:

a. [1]先轉(zhuǎn)換成原始值"1";

b. 轉(zhuǎn)換后與右邊的操作數(shù)"1"類型一樣,"1"=="1",結(jié)果是true;

例3:對象對比布爾值

[1] == true

解析:

a. [1]先轉(zhuǎn)換成原始值"1";

b. 轉(zhuǎn)換后與右邊的操作數(shù)true類型不一樣,將右邊的操作數(shù)true轉(zhuǎn)換成1;

c. 1 == 1結(jié)果是true

4. null和undefined

如果其中一個值是null,另外一個是undefined,結(jié)果是相等

null == undefined

對象轉(zhuǎn)換為原始類型規(guī)則

比較操作符的操作數(shù)可能是任意類型,然而只有數(shù)字和字符串才能真正執(zhí)行比較操作,因此那些不是數(shù)字和字符串的類型都將進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換的規(guī)則如下:

  1. 如果對象類型是Date,會調(diào)用該對象的toString();
  2. 其他情況下,如果valueOf()返回的是原始類型,會調(diào)用對象的valueOf();
  3. 其他情況下(如果valueOf()不存在或沒有返回原始類型),會調(diào)用toString()方法,大部分情況下是用的這種轉(zhuǎn)換。
  4. 如果沒有toString()方法,則拋出一個類型異常錯誤

上面的規(guī)則只是應(yīng)用于+、==、!=中涉及到的對象轉(zhuǎn)為原始類型的轉(zhuǎn)換規(guī)則,如果是> ,< 等其他運算符涉及的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則中除去日期對象的特殊情況,其他是一樣的,也就是說規(guī)則是下面這樣的:

  1. 其他情況下,如果valueOf()返回的是原始類型,會調(diào)用對象的valueOf();
  2. 其他情況下(如果valueOf()不存在或沒有返回原始類型),會調(diào)用toString()方法,大部分情況下是用的這種轉(zhuǎn)換。
  3. 如果沒有toString()方法,則拋出一個類型異常錯誤

總結(jié)

嚴(yán)格相等運算符的比較是不對操作數(shù)進(jìn)行類型轉(zhuǎn)換的,只要操作數(shù)類型不一致,返回就是false;對于操作數(shù)都是原始類型,值相等就返回true,反之返回fase;對于對象,對比的是引用指向的地址,地址是同一個,就返回false,反之返回true;另外介紹了幾個特殊的操作數(shù)的對比,undefined、null、NaN,其中null和undefined是嚴(yán)格相等的,而NaN和任何類型的操作數(shù)都不會相等包括它自己。

相等運算符是會對操作數(shù)進(jìn)行類型轉(zhuǎn)換的,如果操作數(shù)的類型相同,則按嚴(yán)格相等運算符的規(guī)則。如操作數(shù)是不同的原始值類型,則都轉(zhuǎn)換成數(shù)字再進(jìn)行比較;如果是原始值類型和對象的比較,則對象先轉(zhuǎn)換成原始類型值再對比,再比較時如果是相同類型就比較值,如果還是不同,都轉(zhuǎn)換成數(shù)字再進(jìn)行比較;null和undefined是相等的

+、==、!=在進(jìn)行運算時如果涉及到對象類型轉(zhuǎn)為原始值時,轉(zhuǎn)換規(guī)則和其他的運算符是不一樣的。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 使用Echart實現(xiàn)繪制立體的柱狀圖

    使用Echart實現(xiàn)繪制立體的柱狀圖

    EChart開源來自百度商業(yè)前端數(shù)據(jù)可視化團(tuán)隊,基于html5?Canvas,是一個純Javascript圖表庫,提供直觀,生動,可交互,可個性化定制的數(shù)據(jù)可視化圖表。本文將利用EChart繪制立體的柱狀圖,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • 基于JavaScript實現(xiàn)動態(tài)添加刪除表格的行

    基于JavaScript實現(xiàn)動態(tài)添加刪除表格的行

    又一個動態(tài)控制表格的效果,用JavaScript動態(tài)生成表格行、表格列,以及還可動態(tài)刪除這些行列,行等,運行代碼后,點擊對應(yīng)的功能按鈕,即可實現(xiàn)對應(yīng)的表格操作功能,接下來通過代碼實例給大家介紹JavaScript實現(xiàn)動態(tài)添加刪除表格的行,需要的朋友參考下
    2016-02-02
  • js實現(xiàn)背景圖自適應(yīng)窗口大小

    js實現(xiàn)背景圖自適應(yīng)窗口大小

    本文分享了背景圖自適應(yīng)窗口大小的實例代碼,具有一定的參考作用。下面跟著小編一起來看下吧
    2017-01-01
  • layui table復(fù)選框禁止某幾條勾選的實例

    layui table復(fù)選框禁止某幾條勾選的實例

    今天小編就為大家分享一篇layui table復(fù)選框禁止某幾條勾選的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js點擊事件的執(zhí)行過程實例分析【冒泡與捕獲】

    js點擊事件的執(zhí)行過程實例分析【冒泡與捕獲】

    這篇文章主要介紹了js點擊事件的執(zhí)行過程,結(jié)合實例形式分析了js事件機(jī)制中的冒泡與捕獲相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下
    2020-04-04
  • javascript實現(xiàn)列表滾動的方法

    javascript實現(xiàn)列表滾動的方法

    這篇文章主要介紹了javascript實現(xiàn)列表滾動的方法,較為詳細(xì)的分析了javascript實現(xiàn)列表滾動的頁面布局及javascript滾動效果的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 基于javascript實現(xiàn)最簡單選項卡切換

    基于javascript實現(xiàn)最簡單選項卡切換

    這篇文章主要為大家詳細(xì)介紹了基于javascript實現(xiàn)最簡單選項卡切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JS 實現(xiàn) ajax 異步瀏覽器兼容問題

    JS 實現(xiàn) ajax 異步瀏覽器兼容問題

    本文通過實例代碼給大家講解了js實現(xiàn)ajax異步瀏覽器兼容問題,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • JS限制文本框只能輸入數(shù)字和字母方法

    JS限制文本框只能輸入數(shù)字和字母方法

    這篇文章主要介紹了JS限制文本框只能輸入數(shù)字和字母方法,本文給出了限制只能輸入數(shù)字、限制只能輸入字母、限制只能輸入數(shù)字和字母3種腳本,需要的朋友可以參考下
    2015-02-02
  • JavaScript交換變量的常用方法小結(jié)【4種方法】

    JavaScript交換變量的常用方法小結(jié)【4種方法】

    這篇文章主要介紹了JavaScript交換變量的常用方法,結(jié)合實例形式總結(jié)分析了JavaScript交換變量的4種實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-05-05

最新評論

兴宁市| 随州市| 汾阳市| 北京市| 安福县| 沙雅县| 阿坝县| 延长县| 桓仁| 沧源| 白朗县| 高陵县| 大连市| 霸州市| 馆陶县| 宜兰县| 南召县| 桦甸市| 乌兰县| 灵川县| 临安市| 连山| 大理市| 淮阳县| 卢湾区| 麻栗坡县| 沐川县| 武义县| 瓮安县| 上虞市| 宜君县| 东宁县| 南川市| 广宗县| 保康县| 阜平县| 建瓯市| 扎囊县| 英超| 莒南县| 肃北|