JavaScript学习笔记——类型(undefined、null、NaN等)

JavaScript的优点之一是,无需知道这种语言的很多细节,就可以使用它来做很多事情。但要真正掌握这门语言、提升水平,必须对类型了如指掌。
JavaScript的类型系统并不特别缜密,我们会发现它有一些怪癖。把这些怪癖弄清才能避免各种与类型相关的难堪错误。

类型

JavaScript中,类型分为两种:基本类型和对象

  • 基本类型:数字number、字符串string、布尔值booleannullundefined
  • 特殊的类型:对象object类型(用于表示问题空间中的事物)

不属于基本类型的值都是对象
如“数组Array”,其本质上就是对象(即object),有push等方法

在一些情况下,基本类型也如同对象被暂时转换为对象进行处理
使用基本类型string的属性或方法时(如splitsubstringcontact等),JavaScript将把它暂时转换为对象,使用指定的属性或方法,再将其转换为基本类型字符串。这个过程是自动进行的,程序员无需关注。

ps. numberboolean类型(有toString等方法)也有类似的转化

typeof运算符查看其操作数类型

var test1 = "abcdef"; 			console.log(typeof test1);//string
var test2 = 123;				console.log(typeof test2);//number
var test3 = true; 				console.log(typeof test3);//boolean
var test4 = {};					console.log(typeof test4);//object
var test5 = [];					console.log(typeof test5);//object
var test6 = "";					console.log(typeof test6);//string
var test7 = ''; 				console.log(typeof test7);//string
var test8;						console.log(typeof test8);//undefined
function test9(){				
	return "abcdef"
};								console.log(typeof test9);//function
var test10 = null;				console.log(typeof test10);//object
								console.log(typeof undefined);//undefined
								console.log(typeof NaN);//number

特别注意:

  • 数组Arrary的类型----object
  • null的类型-------------object
    这符合上面的结论[不属于基本类型的值都是对象]

特别的,
NaN的类型--------------number
undefined的类型------undefined

JavaScript的假值

JavaScript中总共有5个假值:undefined、null、0、" "(空字符串)和false;
其他值都是真值

undefined——未初始化/未定义

undefined意味着变量未初始化(即:未赋值)或未定义(即:不存在)
访问未赋值的变量var、不存在的属性或数组元素,都将得到undefined

理解:undefined是一个值,它赋给任何未定义的、未初始化的东西,从而让我们能够判断一个变量、属性或数组元素是否赋值了

既然undefined是一个值,那么它也有类型,但其类型既不是对象/数字/字符串/布尔值,也不是任何明确的东西,因此将它的类型也视为[未定义](undefined)的
这是JavaScript的怪异的灰色地带之一,你不得不接受

避免在计算中使用未初始化的值
使用一个变量(基本类型的变量、属性或数组元素)时,先检查是否为undefined

null——“对象不存在”

变量未初始化、对象未指定属性或数组未指定元素时,将返回undefined
本来应该提供一个对象,但无法创建或找到这样一个对象,将提供null

为何不使用undefined来表达这种意思呢?
这并不完美,而且显得有些多余,但现实情况就是如此。

例如

  • document.getElementById()本来要求它返回一个对象,可是如果当前无法返回一个对象,就返回null
  • var killerObjectSomeday = null;
    你还可直接将变量设置为nul,这是什么意思呢?意思是说我本来要将一个对象赋给这个变量,但现在没有这样的对象

null的类型为object。这合情合理,因为null用于表示不存在的对象。

不过这存在很大的争议,在最新的规范中,null的类型为null
浏览器的JavaScript实现没有遵守这种规范,但很少需要在代码中确定null的类型

NaN——“不是数字的数字”

NaN——“Not A Number”,即:不是一个数字
更准确地说,NaN无法表示的数字NaN的类型为number

例如0/0,在计算机中无法表示其结果,就用NaN表示它
类似的例子还有Math.sqrt(-9)"food"*1000等,它们都是NaN
因此,可以认为,NaN本应是一个数字,只是(计算机)无法表示而已
这也是JavaScript的灰色地带之一

  • NaN与其他数值比较,结果为不相等
  • NaNNaN比较,结果为不相等
    (理解:NaN是无法表示的数字,但并非所有无法表示的数字都相同,如Math.sqrt(-1)Math.sqrt(-2))

i.e. NaN与任何值(包括NaN)比较,结果都是不相等

var num;
if(num == NaN) 这个式子的结果永远为false!!!
...
  • 要确认一个值是否为NaN,应使用函数isNaN
    ps. 传递一个不能转化为数字的字符串,如isNaN(“100food”)、isNaN(“0/0”)等,isNaN返回true

Infinity——过大的数

在JavaScript中,
Infinity指的是任何超过浮点数上限1.7976931348623157E+10308
-Infinity指超过浮点数下限-1.7976931348623157E+10308的值

Infinity的类型为number,怀疑某个值太大时,可检查它是否为Infinity:

if (num==Infinity) {
	alert("That's a big number!");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值