if判断、==判断和===判断

<1>if判断语句

1.if判断的介绍

  • if语句是用来进行判断的,其使用格式如下:
if(判断条件):
    条件成立时,要执行的代码

对于括号内的判断条件,会被强制转化成Boolean来判断。
所以,判断条件如何转换,转换后的结果是哪个Boolean值,就需要我们去了解了。

2.if的判断条件转换

对于判断条件的转换,可以参考下面的表格:

数据类型 转换结果
undefined false
null false
Boolean 直接判断
number +0,-0,或NaN为false,其他为true
string 空字符串为false,其他为true
object true

下面是各个数据类型进行判断时的转换:
(1)undefined

if(a)
  console.log("yes")
else
  console.log("no") //返回no

因为a为声明的全局变量,由于变量声明后默认值是undefined,因此转化为false。当if判断条件成功,即为true时,返回yes,否则返回no

(2)null

if(document.getElementById('notExistElement'))
  console.log("yes")
else
  console.log("no") //返回no

因为我们尝试获取一个不存在的对象,所以用null代替,因此document.getElementById('notExistElement')转化为false。当if判断条件成功,即为true时,返回yes,否则返回no

(3)Boolean

if(true)
  console.log("yes")
else
  console.log("no") //返回yes

因为给予了if判断条件true值,当if判断条件成功,即为true时,就直接返回了yes。反之,若给予false,则返回no

(4)number

if(0)
  console.log("yes")
else
  console.log("no") //返回no

if(1)
  console.log("yes")
else
  console.log("no") //返回yes

因为数值+0,-0,或NaNfalse,其他为true,当if判断条件成功,即为true时,就直接返回了yes,否则返回no

(5)string

if("")
  console.log("yes")
else
  console.log("no") //返回no

if(" ")
  console.log("yes")
else
  console.log("no") //返回yes

空字符串为false,其他为true" "因为中间有空格,不是空字符串,当if判断条件成功,即为true时,就直接返回了yes,否则返回no

(6)object

if([])
  console.log("yes")
else
  console.log("no") //返回yes

if({})
  console.log("yes")
else
  console.log("no") //返回yes

对象直接转换为true,所以就直接返回了yes

<2>比较运算符

  • JavaScript 有两种比较方式:严格比较运算符和转换类型比较运算符。
    对于严格比较运算符(===)来说,仅当两个操作数的类型相同且值相等为 true
    而对于被广泛使用的比较运算符(==)来说,会在进行比较之前,将两个操作数转换成相同的类型。
    对于关系运算符(比如 <=)来说,会先将操作数转为原始值,使它们类型相同,再进行比较运算。

1.==运算符

比较运算符会为两个不同类型的操作数转换类型,然后进行严格比较。
当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。
比较运算符的类型转换,可以参考下面的表格:

左边 右边 结果
undefined null true (这个比较特殊)
NaN NaN false (NaN和任何值不相等,包括其自身)
number string string转换为number,然后进行比较
Boolean (any) Boolean转为number,然后进行比较
string object object转为string,然后进行比较
number object object转为number,然后进行比较
其他 其他 false

对于number转换,可以参考下表

数据类型 转换结果
undefined NaN
null 0
true 1
false 0
"123" 123
"abc" NaN

对于对象的数据转换,先调用valueof获取结果,没有则调用toString()。当对象为空时,toString得到的结果是[object object]

下面是各个数据类型进行比较时的例子:
(1)undefined 和 null
undefinednull比较特殊,除了自身绝对相等以外,它们之间还相等。

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

(2)NaN,以及同一类型值
同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false

NaN == NaN  // false

NaN与任何值都不相等(包括自身)

12 == 12  // true
12 == 34  // false

同一类型的number会直接进行数值比较

(3)复合类型值
两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。

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

因为运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false

如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 == v2 // true

对于两个对象的比较,相等运算符比较的是地址

(4)number 和 string

123 == "123"  // true

stringnumber相等比较时,会自动转换为number数据进行比较。

(5)Boolean 和 其他类型比较

true == "true"  // 返回false,表达式等同 Number(true) === Number("true") --> 1 === NaN
0 == false  //返回true,表达式等同 0 === Number(false)--> 0 === 0
"" == false  //返回true,表达式等同 Number("") === Number(false)--> 0 === 0

Boolean与其他相等比较时,会自动将两边转换为number数据进行比较。

(6)object 和 其他类型比较

[1] == 1  // 返回true,表达式等同 Number([1]) === 1 --> 1 === 1
[1] == "1"  //返回true,表达式等同 String([1]) == "1"--> "1" === "1"
[1] == false  //返回false,表达式等同 Number([1]) === Number(false)--> 1 === 0

object与其他相等比较时,会自动将两边转换为numberstring数据进行比较。

2.===运算符

严格相等运算符会为两个操作数进行严格比较,类型也会进行严格比较。
下面是各个数据类型进行比较时的例子:
(1)不同类型的值
如果两个值的类型不同,直接返回false

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

上面的代码因为类型不同,所以结果都是false

(2)同一类的原始类型值
同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false

1 === 0x1 // true

上面代码比较十进制的1与十六进制的1,因为类型和值都相同,返回true

NaN === NaN  // false
+0 === -0 // true

NaN与任何值都不相等(包括自身)。另外,正0等于负0

(3)复合类型值
两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。

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

因为运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false

如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

对于两个对象的比较,严格相等运算符比较的是地址,而大于或小于运算符比较的是值。

var obj1 = {};
var obj2 = {};

obj1 > obj2 // false
obj1 < obj2 // false
obj1 === obj2 // false

上面的三个比较,前两个比较的是值,最后一个比较的是地址,所以都返回false

(4)undefined 和 null
undefinednull与自身严格相等。

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

由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

var v1;
var v2;
v1 === v2 // true

你可能感兴趣的:(if判断、==判断和===判断)