在 JavaScript 中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为 假值(即除 false、0、-0、0n、""、null、undefined 和 NaN 以外皆为真值)。
JavaScript 在布尔值上下文中使用强制类型转换(coercion)。
JavaScript 中的真值示例如下(将被转换为 true,if 后的代码段将被执行):
if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
falsy 值 (虚值) 是在 Boolean 上下文中认定为 false 的值。
JavaScript 在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,例如条件语句和循环语句。
在 JavaScript 中只有 8 个 falsy 值:false,0,-0,0n(BinInt中的0n)," 、``or " " (即空字符串),null,undefined,NaN
JavaScript 中 falsy 值的例子 (在布尔值上下文中被转换为 false,从而绕过了 if 代码块):
if (false)
if (null)
if (undefined)
if (0)
if (0n)
if (NaN)
if ('')
if ("")
if (``)
运算符 | 说明 |
---|---|
== | 比较两个操作数的值是否相等 |
!== | 比较两个数的值是否不相等 |
=== | 比较两个数的值是否相等,同时检测它们的数据类型是否相等 |
!=== | 和‘===’的取值相反 |
在比较时,应当注意一下步骤:
所以我们可以将**==**运算分为三种情况:
class Student {
constructor(age,name) {
this.age = age
this.name = name
}
toString(){
return this.name
}
}
console.log('Niall'==new Student(19,'Niall')) //true
console.log([]=='') //true
console.log('010'==10) //true
console.log([] == {}) //false
console.log(''==false) //true
[]==''
为什么是true?
[]
是object
类型,''
是字符串类型,所以会将[]
转换成str
之后再进行比较,[].toString
返回的是一个空字符串,所以最后结果为true
[] == {}
为什么是false?
[]
是object
类型,{}
也是object
类型,所以在比较的时候是比较他们两个的引用地址,所以最后的结果为false。
''== false
为什么是true?
''
是str
类型,false
也是boolean
类型,所以在比较的时候需要前置转换成数字,Number('')
为0,Number(false)
也为0,所以最后的结果为true。
Truthy代表的是真值,是该目标在布尔值上下文中强制转化后为真的值,而Falsy则相反。
结合3. 比较运算符,一个值是真值,并不意味者该值==true。
console.log(Boolean([])) //true
console.log([]==true) //false
这里在比较[]==true
时,会将两边都转换成数字进行比较,Number([])
为0,Number(true)
为1,所以结果为false。
Object.is() 方法判断两个值是否为同一个值。
语法:
Object.is(value1, value2);
返回值:一个Boolean类型标示两个参数是否为同一个值。
Object.is()
方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:
undefined
null
true
orfalse
console.log(Object.is(NaN,NaN)) //true
let a = {name:'Niall',age:12}
let b = {name:'Niall',age:12}
console.log(Object.is(a,b)) //false