亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript 更嚴(yán)格的相等 [譯]

 更新時(shí)間:2012年09月20日 23:00:24   作者:  
大部分JavaScript程序員都知道:應(yīng)該使用嚴(yán)格相等(===)來代替“普通”的相等操作(==).但是,有時(shí)候你的確需要一個(gè)比嚴(yán)格相等===更嚴(yán)格的運(yùn)算符,比如說:在你想檢查某個(gè)值是否是NaN的時(shí)候,又或者你想?yún)^(qū)分-0和+0的時(shí)候.本文解釋了相關(guān)的知識(shí)以及ECMAScript.next中的解決辦法:“is”操作符
1.檢測(cè)NaN
在數(shù)學(xué)上,任意值x總是與自己相等:

x = x

但這條規(guī)則并不適用于 === 和 NaN:
復(fù)制代碼 代碼如下:

> NaN === NaN
false

導(dǎo)致的結(jié)果就是,你不能通過使用indexOf方法在一個(gè)包含了NaN的數(shù)組中找到這個(gè)NaN,因?yàn)樵摲椒ㄔ趦?nèi)部是使用了===來判斷一個(gè)元素是否和參數(shù)中指定的值相等的:
復(fù)制代碼 代碼如下:

> [ NaN ].indexOf(NaN)
-1

譯者注:switch語句同理
復(fù)制代碼 代碼如下:

switch (NaN) {
case NaN:alert(NaN);
}

如果你不能使用 === 來檢測(cè)NaN,那該使用什么呢?有一個(gè)全局函數(shù)isNaN(),但這個(gè)函數(shù)有個(gè)問題,就是它總會(huì)隱式的將參數(shù)中的值轉(zhuǎn)換成數(shù)字再做判斷,這樣就在判斷很多明顯不是NaN的值的時(shí)候也返回了true:
復(fù)制代碼 代碼如下:

> isNaN("foo")
true

解釋:"foo"被轉(zhuǎn)換成了數(shù)字NaN.
復(fù)制代碼 代碼如下:

> Number("foo")
NaN

另外一個(gè)檢測(cè)NaN的方法就是利用NaN是唯一一個(gè)與自身嚴(yán)格不相等的值:
復(fù)制代碼 代碼如下:

function myIsNaN(value) {
return value !== value;
}

另外一個(gè)更易懂的方法是在使用isNaN()之前先檢查一下這個(gè)值是不是數(shù)字類型.這樣就避免了隱式轉(zhuǎn)換的問題.
復(fù)制代碼 代碼如下:

function myIsNaN2(value) {
return typeof value === 'number' && isNaN(value);
}

ECMAScript.next中將會(huì)有一個(gè)新的Number.isNaN()方法,它是一個(gè)修正版的isNaN()函數(shù).

2.區(qū)分-0和+0

這樣的需求很少見,但有時(shí)候你的確需要區(qū)分+0(正零)和-0(負(fù)零),在JavaScript中,這是兩個(gè)不同的值.但===不能判斷出來:
復(fù)制代碼 代碼如下:

> -0 === +0
true

那到底該怎么來區(qū)分呢?在JavaScript中.如果讓一個(gè)正數(shù)除以−0,結(jié)果是-Infinity.如果除以+0,則結(jié)果是Infinity.這兩個(gè)無窮大值是可以使用===來判斷的:
復(fù)制代碼 代碼如下:

> 1 / -0
-Infinity

> 1 / +0
Infinity

> Infinity === -Infinity
false

譯者注:寫成函數(shù)就是
復(fù)制代碼 代碼如下:

function isPositiveZero(zero){
return 1/zero === Infinity

}
function isNegativeZero(zero){
return 1/zero === -Infinity
}


3.ECMAScript.next中更嚴(yán)格的相等:“is”操作符

ECMAScript.next會(huì)有一個(gè) is” 操作符,它的作用就是"更嚴(yán)格的相等”:它能把NaN看作等于自身,還能區(qū)分開-0和+0.還有一個(gè)相反的操作符稱為“isnt”.例如:
復(fù)制代碼 代碼如下:

> NaN is NaN
true

> -0 isnt +0
true


目前這個(gè)操作符可以由Object.is()方法來彌補(bǔ).這個(gè)方法可以這樣實(shí)現(xiàn):

復(fù)制代碼 代碼如下:

Object.is = function(x, y) {
if (x === y) {
// x === 0 => 比較+0和-0
return x !== 0 || (1/x === 1/y);
}

// x !== y => 只有在x和y都是NaN時(shí)才返回true
return x !== x && y !== y;
};


3.1 嘗試Object.is()

如果你想嘗試一下Object.is(),你可以使用es6-shim,它可以將ECMAScript.next(ECMAScript 6)中的一些特性移植到ECMAScript 5中.

譯者注:如果想在ES3的環(huán)境上使用,則還得使用es5-shim

4.參考
  1. Equality in JavaScript: === versus ==
  2. ECMAScript.next: the “TXJS” update by Eich
  3. NaN and Infinity in JavaScript
  4. es6-shim – ECMAScript 6 functionality on ECMAScript 5

相關(guān)文章

  • 詳解JavaScript中的作用域

    詳解JavaScript中的作用域

    作用域是JavaScript中一個(gè)重要的概念,它決定了變量和函數(shù)在代碼中的可訪問性和可見性,了解JavaScript的作用域?qū)τ诰帉懜咝?、可維護(hù)的代碼至關(guān)重要,本文將深入介紹JavaScript作用域相關(guān)的知識(shí)點(diǎn),其中包括作用域類型,作用域鏈,變量提升以及閉包等
    2023-08-08
  • JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)跨年倒計(jì)時(shí)

    JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)跨年倒計(jì)時(shí)

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)跨年倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • for?of?和?for?in?的區(qū)別介紹

    for?of?和?for?in?的區(qū)別介紹

    這篇文章主要介紹了for?of?和?for?in?的區(qū)別,for?of?和?for?in都是用來遍歷的屬性,本文重點(diǎn)介紹下for?of?和?for?in?的區(qū)別,需要的朋友可以參考下
    2022-12-12
  • 用JavaScript實(shí)現(xiàn)類似于ListBox功能示例代碼

    用JavaScript實(shí)現(xiàn)類似于ListBox功能示例代碼

    這篇文章主要介紹了用JavaScript實(shí)現(xiàn)類似于ListBox功能,需要的朋友可以參考下
    2014-03-03
  • JS獲得選取checkbox整行數(shù)據(jù)的方法

    JS獲得選取checkbox整行數(shù)據(jù)的方法

    這篇文章主要介紹了JS獲得選取checkbox整行數(shù)據(jù)的方法,涉及使用js對(duì)DOM節(jié)點(diǎn)的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • fabric.js實(shí)現(xiàn)diy明信片功能

    fabric.js實(shí)現(xiàn)diy明信片功能

    這篇文章主要為大家詳細(xì)介紹了fabric.js實(shí)現(xiàn)diy明信片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • swiper實(shí)現(xiàn)導(dǎo)航滾動(dòng)效果

    swiper實(shí)現(xiàn)導(dǎo)航滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了swiper實(shí)現(xiàn)導(dǎo)航滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Javascript動(dòng)畫效果(4)

    Javascript動(dòng)畫效果(4)

    這篇文章主要為大家詳細(xì)介紹了第四篇Javascript動(dòng)畫效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 詳細(xì)分析JavaScript函數(shù)定義

    詳細(xì)分析JavaScript函數(shù)定義

    這篇文章主要給大家詳細(xì)分析了JavaScript函數(shù)定義的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • javascript string字符串優(yōu)化問題

    javascript string字符串優(yōu)化問題

    今天看到一個(gè)很久的帖子說string連接優(yōu)化問題。于是自己也測(cè)試一下。寫了個(gè)很簡(jiǎn)單的代碼
    2011-07-07

最新評(píng)論