国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 14:21:10
字體:
供稿:網(wǎng)友
1.檢測(cè)NaN
在數(shù)學(xué)上,任意值x總是與自己相等:

x = x

但這條規(guī)則并不適用于 === 和 NaN:
代碼如下:
> NaN === NaN
false

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

譯者注:switch語句同理
代碼如下:
switch (NaN) {
case NaN:alert(NaN);
}

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

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

另外一個(gè)檢測(cè)NaN的方法就是利用NaN是唯一一個(gè)與自身嚴(yán)格不相等的值:
代碼如下:
function myIsNaN(value) {
return value !== value;
}

另外一個(gè)更易懂的方法是在使用isNaN()之前先檢查一下這個(gè)值是不是數(shù)字類型.這樣就避免了隱式轉(zhuǎn)換的問題.
代碼如下:
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è)不同的值.但===不能判斷出來:
代碼如下:
> -0 === +0
true

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

> 1 / +0
Infinity

> Infinity === -Infinity
false

譯者注:寫成函數(shù)就是
代碼如下:
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”.例如:
代碼如下:
> NaN is NaN
true

> -0 isnt +0
true


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

代碼如下:
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()
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 沙河市| 新龙县| 鞍山市| 伊春市| 行唐县| 潼南县| 庆城县| 武隆县| 长寿区| 宝坻区| 榆社县| 南木林县| 嘉义市| 搜索| 张家港市| 昔阳县| 宝鸡市| 旌德县| 西安市| 大同市| 商洛市| 丰城市| 广元市| 陇川县| 盐源县| 汨罗市| 左贡县| 大田县| 大渡口区| 客服| 巨鹿县| 徐水县| 普安县| 东安县| 胶南市| 贵定县| 铁力市| 响水县| 东明县| 惠州市| 理塘县|