Javascript中的相等與不等運(yùn)算
更新時(shí)間:2010年04月25日 15:31:15 作者:
在 javascript 中,可以使用 == 來比較兩個(gè)數(shù)據(jù)是否相等,如果兩個(gè)數(shù)據(jù)的類型不同,那么,將在進(jìn)行轉(zhuǎn)換后進(jìn)行比較
轉(zhuǎn)換的規(guī)則如下:
如果其中一個(gè)操作數(shù)的類型為 Boolean ,那么,首先將它轉(zhuǎn)換為數(shù)字類型,false 轉(zhuǎn)換為 0, true 將轉(zhuǎn)換為 1。
如果其中一個(gè)操作數(shù)的類型是字符串,另外一個(gè)為數(shù)字類型,那么,將字符串轉(zhuǎn)換為數(shù)字進(jìn)行比較。
如果其中一個(gè)操作數(shù)的類型是字符串,另外一個(gè)為 object 類型,那么,將調(diào)用對(duì)象的 toString 方法之后,比較字符串。
如果其中一個(gè)操作數(shù)的類型是數(shù)字類型,另外一個(gè)為 object 類型,那么,將對(duì)象轉(zhuǎn)換為數(shù)值后進(jìn)行數(shù)字比較。
以下的規(guī)定了一些特殊的比較:
null 和 undefined 是相等的。
null 和 undefined 不會(huì)轉(zhuǎn)換為任何其他類型
如果任何一個(gè)操作的結(jié)果為 NaN,那么相等比較返回 false,不相等比較返回 true。注意,即使兩個(gè)操作數(shù)都為 NaN,返回結(jié)果一樣是 false,也就是說,NaN 不等于 NaN。
如果兩個(gè)操作數(shù)都是對(duì)象,那么比較它們引用的值,如果引用同一個(gè)對(duì)象,那么,返回真,否則,返回假。
alert(null == undefined); // true
alert(undefined == null); // true
alert(true == 1); // true
alert(false == 0); // true
alert(true == 2); // false
var obj = {};
alert(10 == obj); // false
完全相同的比較 === 和不完全相等 !==
完全相同的比較用來比較不進(jìn)行轉(zhuǎn)換是否相等,例如:
var a = "100";
var b = 100;
alert(a == b); // true
alert(a === b); // false
== 比較將返回真,因?yàn)?“100” 首先轉(zhuǎn)換為數(shù)字 100, 然后與數(shù)字 100 進(jìn)行比較,結(jié)果相等。
=== 比較將返回假,因?yàn)樽址?”100” 不經(jīng)過轉(zhuǎn)換的話,與數(shù)字 100 不相等。
!== 用于比較在不轉(zhuǎn)換的情況下,是否不相等。
alert(a != b); // false
alert(a !== b); // true
第一種情況將返回假,因?yàn)檗D(zhuǎn)換后是相等的。第二種情況將返回真,因?yàn)椴唤?jīng)過轉(zhuǎn)換的話,他們一個(gè)是字符串,一個(gè)是數(shù)字,是不相等的。
如果其中一個(gè)操作數(shù)的類型為 Boolean ,那么,首先將它轉(zhuǎn)換為數(shù)字類型,false 轉(zhuǎn)換為 0, true 將轉(zhuǎn)換為 1。
如果其中一個(gè)操作數(shù)的類型是字符串,另外一個(gè)為數(shù)字類型,那么,將字符串轉(zhuǎn)換為數(shù)字進(jìn)行比較。
如果其中一個(gè)操作數(shù)的類型是字符串,另外一個(gè)為 object 類型,那么,將調(diào)用對(duì)象的 toString 方法之后,比較字符串。
如果其中一個(gè)操作數(shù)的類型是數(shù)字類型,另外一個(gè)為 object 類型,那么,將對(duì)象轉(zhuǎn)換為數(shù)值后進(jìn)行數(shù)字比較。
以下的規(guī)定了一些特殊的比較:
null 和 undefined 是相等的。
null 和 undefined 不會(huì)轉(zhuǎn)換為任何其他類型
如果任何一個(gè)操作的結(jié)果為 NaN,那么相等比較返回 false,不相等比較返回 true。注意,即使兩個(gè)操作數(shù)都為 NaN,返回結(jié)果一樣是 false,也就是說,NaN 不等于 NaN。
如果兩個(gè)操作數(shù)都是對(duì)象,那么比較它們引用的值,如果引用同一個(gè)對(duì)象,那么,返回真,否則,返回假。
alert(null == undefined); // true
alert(undefined == null); // true
alert(true == 1); // true
alert(false == 0); // true
alert(true == 2); // false
var obj = {};
alert(10 == obj); // false
完全相同的比較 === 和不完全相等 !==
完全相同的比較用來比較不進(jìn)行轉(zhuǎn)換是否相等,例如:
var a = "100";
var b = 100;
alert(a == b); // true
alert(a === b); // false
== 比較將返回真,因?yàn)?“100” 首先轉(zhuǎn)換為數(shù)字 100, 然后與數(shù)字 100 進(jìn)行比較,結(jié)果相等。
=== 比較將返回假,因?yàn)樽址?”100” 不經(jīng)過轉(zhuǎn)換的話,與數(shù)字 100 不相等。
!== 用于比較在不轉(zhuǎn)換的情況下,是否不相等。
alert(a != b); // false
alert(a !== b); // true
第一種情況將返回假,因?yàn)檗D(zhuǎn)換后是相等的。第二種情況將返回真,因?yàn)椴唤?jīng)過轉(zhuǎn)換的話,他們一個(gè)是字符串,一個(gè)是數(shù)字,是不相等的。
相關(guān)文章
javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用詳解
這篇文章主要介紹了javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用,結(jié)合實(shí)例形式分析了javascript組合模式基本概念、原理、應(yīng)用場(chǎng)景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04說明你的Javascript技術(shù)很爛的五個(gè)原因
Javascript在互聯(lián)網(wǎng)上名聲很臭,但你又很難再找到一個(gè)像它這樣如此動(dòng)態(tài)、如此被廣泛使用、如此根植于我們的生活中的另外一種語言。2011-04-04JavaScript創(chuàng)建類/對(duì)象的幾種方式概述及實(shí)例
JS中的對(duì)象強(qiáng)調(diào)的是一種復(fù)合類型,JS中創(chuàng)建對(duì)象及對(duì)對(duì)象的訪問是極其靈活的,下面與大家分享下創(chuàng)建類/對(duì)象的幾種方式,感興趣的朋友可以了解下哈2013-05-05js使用棧來實(shí)現(xiàn)10進(jìn)制轉(zhuǎn)8進(jìn)制與取除數(shù)及余數(shù)
這篇文章主要介紹了js使用棧來實(shí)現(xiàn)10進(jìn)制轉(zhuǎn)8進(jìn)制、js取除數(shù)、余數(shù),需要的朋友可以參考下2014-06-06JS中利用FileReader實(shí)現(xiàn)上傳圖片前本地預(yù)覽功能
FileReader 對(duì)象允許Web應(yīng)用程序異步讀取存儲(chǔ)在用戶計(jì)算機(jī)上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用 File 或 Blob 對(duì)象指定要讀取的文件或數(shù)據(jù)。下面通過本文給大家介紹JS中利用FileReader實(shí)現(xiàn)上傳圖片前本地預(yù)覽功能,需要的朋友參考下2018-03-03