Null和Undefined
Null
null 专门用来定义一个空对象。例如:let a = null
,又例如 Object.create(null)
.
如果你想定义一个变量用来保存引用类型,但是还没想好放什么内容,这个时候,可以在初始化时将其设置为 null。你可以把 null 理解为:null 虽然是一个单独的数据类型,但null 相当于是一个 object,只不过地址为空(空指针)而已。
- Null 类型的值只有一个,就是 null。比如
let a = null
。 - 使用 typeof 检查一个 null 值时,会返回 object。
Undefined
声明变量但未赋值、未声明直接使用变量、函数无返回值、调用参数未传参时全部返回undefined
null == undefined
的结果为true
,但是null === undefined
的结果是false
10 + null 结果为 10。
10 + undefined 结果为 NaN。
任何值和 null 运算,null 可看做 0 运算。
任何数据类型和 undefined 运算都是 NaN。
变量数据类型转换
通常有三种形式的类型转换:
- 转换为字符串类型
- 转换为数字型
- 转换为布尔型
typeof运算符
两种写法:
1 | // 写法1 |
typeof的返回结果就是变量的类型,即一个字符串
变量的类型转换的分类
显式类型转换
- toString()
- String()
- Number()
- parseInt(string)
- parseFloat(string)
- Boolean()
隐式类型转换
- isNaN ()
- 自增/自减运算符:
++
、—-
- 正号/负号:
+a
、-a
- 加号:
+
- 运算符:
-
、*
、/
隐式类型转换(特殊)
- 逻辑运算符:
&&
、||
、!
。非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算。&&
、||
的运算结果是原值,!
的运算结果为布尔值。具体可以看下一篇文章《运算符》。 - 关系运算符:
<
、>
<=
>=
等。关系运算符,得到的运算结果都是布尔值:要么是 true,要么是 false。具体可以看下一篇文章《运算符》。
几种我存在不了解点的类型转换
- 调用toString()方法不会影响原变量,而是将转换的结果返回,想直接修改原变量可以直接写成
a = a.toString()
- null 和 undefined 这两个值没有 toString() 方法,所以它们不能用 toString() 。如果调用会报错。
- Number 类型的变量,在调用 toString(int a)时,可以在方法中传递一个整数作为参数。此时它会把数字转换为指定的进制,如果不指定则默认转换为 10 进制。
- String()函数与toString()方法不同,对Number、Boolean、Object而言本质上就是调用toString,但是对null和undefined会直接转换成字符串“null”和“undefined”