源链接:https://wangdoc.com/javascript/index.html
null和undefined
两者都表示“没有”,但仍有区别,null突出变量的值是不存在的,undefined突出变量没有被定义。
一般情况下,判断对象是否包含某个属性的时候都会用到undefined
var tmp = {a: '1'}
tmp.b // undefined
另外null和undefined在转换为Boolean时都会转变为false,所以判断对象的某个属性是否存在时可以直接这么用
if(!tmp.b) { console.log('属性不存在') }
null和undefined的异同
相同点
- 两者直接转换为Boolean都会转换为false
- 两者都表示“没有”这一概念
不同点
-
转换为Number时会有不同
Number(null) // 0 5 + null // 5 Number(undefined) // NaN 5 + undefined // NaN
-
undefined表示变量没有被定义,null表示变量的值现在为空
boolean
与其他编程语言相同,真假两个状态:true、false。
以下运算会返回boolean
- 前置逻辑运算符:
!
- 相等运算符:
===
,!==
,==
,!=
- 比较运算符:
>
,>=
,<
,<=
如果JS调用方法时预期的某个输入应该是boolean,那么无论输入什么类型的变量都会自动转换为boolean。
其他值转换为boolean值的转换规则为:除以下6个值会被转换为false
,其他值都会被转换为true
(注:[]
和{}
也会被转换为true
)
- undefined
- null
- false
- 0
- NaN
- ""或’’(空字符串)
关于返回boolean的运算符
!
会先将后面先转换为boolean再取反,如果后面接多个逻辑记得加()
===
和!==
是对于原生类型(null、undefined、string、number、boolean)严格的相等,等号两边的类型不同或值不同均会返回false。但于对Array和Object的比较有些特殊,这一块我看到对象的时候再说。
==
,!=
,>
,>=
,<
,<=
使用时有以下规则:
-
符号两边中有null和undefined时
-
符号两边均为null或undefined时,先把null和undefined转换为boolean再比较
null == null // true null == undefined // true undefined == undefined // true
-
符号一边为null或undefined,另一边number时, 如下。
>
,<
时null可视为0,其他情况null为空值。undefined在任何情况下都会返回false1 > null // true -1 < null // true 0 == null // false 0 != null // true 1 > undefined // false 0 == undefined // false
-
符号一边为null或undefined,另一边string时,除
!=
会返回true,其他符号都会返回false(空字符串也是这样)'a' == null // false 'a' != null // true 'a' > null // false 'a' < null // false
-
-
符号两边不含null或undefined时
-
符号左右为同一类型时
- 如果是number直接比较
- 如果是string,
==
、!==
可以比较内容,>
,>=
,<
,<=
会取string第一个字符串的ascii码比较,''
空字符串为0
-
符号一边为boolean时
- 另一边如果为number,可视boolean为0、1
- 另一边如果是string,
!=
时返回true,其他均返回false
-
符号两边为string和number时
'a' !== 100 // true 'a' == 100 // false 'a' > 100 // false 'a' < 100 // false
-