JavaScript的优点之一是,无需知道这种语言的很多细节,就可以使用它来做很多事情。但要真正掌握这门语言、提升水平,必须对类型了如指掌。
JavaScript的类型系统并不特别缜密,我们会发现它有一些怪癖。把这些怪癖弄清才能避免各种与类型相关的难堪错误。
类型
JavaScript中,类型分为两种:基本类型和对象
- 基本类型:数字
number、字符串string、布尔值boolean、null和undefined - 特殊的类型:对象
object类型(用于表示问题空间中的事物)
不属于基本类型的值都是对象
如“数组Array”,其本质上就是对象(即object),有push等方法
在一些情况下,基本类型也如同对象被暂时转换为对象进行处理:
使用基本类型string的属性或方法时(如split、substring、contact等),JavaScript将把它暂时转换为对象,使用指定的属性或方法,再将其转换为基本类型字符串。这个过程是自动进行的,程序员无需关注。ps.
number、boolean类型(有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()本来要求它返回一个对象,可是如果当前无法返回一个对象,就返回nullvar 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与其他数值比较,结果为不相等NaN与NaN比较,结果为不相等
(理解: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!");
}
本文探讨了JavaScript中的类型系统,包括基本类型和对象类型。JavaScript的怪癖在于其类型转换规则,如基本类型在某些情况下会临时转换为对象。文章详细介绍了null、undefined、NaN和Infinity这些特殊值的类型和用法,并强调了在编程中避免使用未初始化的值以及检查NaN的重要性。同时,提到了JavaScript中假值的概念,包括undefined、null、0、空字符串和false。
4万+

被折叠的 条评论
为什么被折叠?



