# 悟透 JavaScript - 回归简单

**URL:** <https://www.isharkfly.com/t/javascript/8694>\
**Category:** 前端\
**Created:** [October 29, 2012, 4:20am UTC](https://www.isharkfly.com/t/javascript/8694 "2012-10-29T04:20:50Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [October 29, 2012, 4:20am UTC](https://www.isharkfly.com/t/javascript/8694/1 "2012-10-29T04:20:50Z")

</div>

要理解JavaScript，你得首先放下对象和类的概念，回到数据和代码的本原。

前面说过，编程世界只有数据和代码两种基本元素，而这两种元素又有着纠缠不清的关系。JavaScript就是把数据和代码都简化到最原始的程度。

JavaScript中的数据很简洁的。简单数据只有 undefined, null, boolean, number和string这五种，而复杂数据只有一种，即object。

这就好比中国古典的朴素唯物思想，把世界最基本的元素归为金木水火土，其他复杂的物质都是由这五种基本元素组成。

JavaScript中的代码只体现为一种形式，就是function。

注意：以上单词都是小写的，不要和Number, String, Object, Function等JavaScript内置函数混淆了。要知道，JavaScript语言是区分大小写的呀!

任何一个JavaScript的标识、常量、变量和参数都只是unfined, null, bool, number, string, object 和 function类型中的一种，也就typeof返回值表明的类型。除此之外没有其他类型了。

先说说简单数据类型吧。

```
undefined: 代表一切未知的事物，啥都没有，无法想象，代码也就更无法去处理了。
                  注意：typeof(undefined) 返回也是 undefined。
                          可以将undefined赋值给任何变量或属性，但并不意味了清除了该变量，反而会因此多了一个属性。

null: 有那么一个概念，但没有东西。无中似有，有中还无。虽难以想象，但已经可以用代码来处理了。
                  注意：typeof(null)返回object，但null并非object，具有null值的变量也并非object。

boolean: 是就是，非就非，没有疑义。对就对，错就错，绝对明确。既能被代码处理，也可以控制代码的流程。

number: 线性的事物，大小和次序分明，多而不乱。便于代码进行批量处理，也控制代码的迭代和循环等。
                  注意：typeof(NaN)和typeof(Infinity)都返回number 。
                          NaN参与任何数值计算的结构都是NaN，而且 NaN != NaN 。
                          Infinity / Infinity = NaN 。

string: 面向人类的理性事物，而不是机器信号。人机信息沟通，代码据此理解人的意图等等，都靠它了。

```

简单类型都不是对象，JavaScript没有将对象化的能力赋予这些简单类型。

直接被赋予简单类型常量值的标识符、变量和参数都不是一个对象。

所谓“对象化”，就是可以将数据和代码组织成复杂结构的能力。

JavaScript中只有object类型和function类型提供了对象化的能力。
