研磨JavaScript系列(一):回归简单

想要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原。编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系。JavaScript就是把数据和代码都简化到最原始的程度。

JavaScript中的数据是很简单的。简单数据只有undefined、null、boolean、number和string这5种,而复杂数据只有一种,也就是object。

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

注意:以上单词均为小写的,不要和Number、String、Object、Function等JavaScript内置函数混淆了。

在JavaScript中,我们可以使用typeof运算符,来获取元素的类型。由于typeof是运算符,因此,在JavaScript中有两种等价的写法。

1 typeof x
2 typeof(x)

typeof(x)运算后的结果是一个string类型的值。

1 typeof 123                        //结果是number
2 typeof true                       //结果是boolean
3 typeof "i love javascript"        //结果是string
4 typeof(undefined)                 //结果是undifined
5 typeof(null)                      //结果是object,但是null并非object,具有null值得变量也并非object
6 typeof(NaN)                       //结果是number
7 typeof(infinity)                  //结果是number

先来说说简单数据类型吧。

undefined   代表一切未知事物,啥都没有,无法想象,代码也就无法处理了。
null 有那么一个概念,但没有东西。无中似有,有中似无。虽难以想象,但已经可以用代码来处理了。
boolean 是就是,非就非,没有疑义。对就对,错就错,绝对明确。既能被代码处理,也可以控制代码流程。
number 线性的事物,大小和次序分明,多而不乱。便于代码进行批量处理,也控制代码的迭代和循环等。
string 面向人类的理性事物,而不是机器信号。人机信息沟通,代码据此理解人的意图等功能,都靠他了。

在JavaScript中,为了进一步简化代码,JavaScript还在这些简单数据上,再规定了一些特殊的含义。这些含义可以使得JavaScript的语句写的更简洁。但是这些特殊含义有时候也会给我们设下难以琢磨的陷阱。

例如:undefined、null、""、0这四个值转换为逻辑值后都是false。除了这四个家伙,再加上false本身之外,其他任何东西(包括简单类型值、所有对象和函数)转换成逻辑值都是true。然而有趣的是undefined、null、""、0、false这五个家伙中,除了undefined == null,其他的他们却又互不相等。使用这些规定,我们可以编写出更简洁的逻辑判断语句。

再比如:完全有数字组成的字符串与该字符串表示的值是相等的。也就是说

1 "123" == 123       //结果是true

 但是

1 0123 != "0123"     //结果是false

这又是为什么呢?

因为,在JavaScript中,JavaScript引擎将"0"开头的整数常量当作是八进制数处理,所以0123其实是个八进制数。然而"0123"是按照十进制来转换成数值的,自然就不会想等了。

那么,如果我们不想让"123" == 123该怎么办呢?对了,JavaScript提供了一个"==="的运算符,那就是全等运算符。它的含义是不但这两个变量的值需要想等,这两个变量的数据类型也必须相同。也就是说

1 typeof(123 === "123")      //结果是false

 由此,我们引申出了另一个运算符,那就是"!==",他就是不全等运算符。

注意:"不全等"与"全不等"是两个概念哦。

"!=="这种不全等表示为以下这样的等价逻辑

1 A != B || typeof A != typeof B

 然而,全不等表示的等价逻辑应该是

1 A != B && typeof(A) != typeof(B)

不过,在编写程序时,基本上遇不到"全不等"这样的判断,因此JavaScript也就没有专门的运算符了。

所谓简单类型都不是对象,JavaScript没有将对象化的能力赋予这些简单类型。直接被赋予简单类型的常量值得标识符、变量和参数都不是一个对象。

所谓对象话能力,就是可以将数据和代码组织成复杂结构的能力。JavaScript中只有object类型和function类您贵姓提供了对象化的能力。

文章声明本文部分内容参考自《悟透JavaScript》,这是一本学习JavaScript非常好的书。

原文地址:https://www.cnblogs.com/HLiang/p/return_to_simple.html