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

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

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

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

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

 typeof x
typeof(x)

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

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

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

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

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

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

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

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

但是

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

这又是为什么呢?

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Hibernate批量处理海量数据的方法
  2. RDIFramework.NET ━ 9.2 员工管理 ━ Web部分
  3. 微信消息回复C#
  4. IOS设计模式之四(备忘录模式,命令模式)
  5. Unable to boot : please use a kernel appropriate for your cpu
  6. Linux 下Tomcat启动Cannot find ./catalina.sh
  7. Bash启动选项
  8. Java基本语法-----java二维数组
  9. 【Qt编程】基于Qt的词典开发系列<十二>调用讲述人
  10. 二、JavaScript基础(2)
  11. Fragment的详细使用
  12. SQL Server的等待事件
  13. vue ie
  14. SQL SERVER中的And与Or的优先级
  15. 【一】,python简单爬虫实现
  16. java equals()方法的注意事项
  17. [转]vim 退格键(backspace)不能用
  18. SAFEARRAY
  19. 201621123033 《Java程序设计》第5周学习总结
  20. Part5核心初始化_lesson3---关闭看门狗

热门文章

  1. 【Codeforces 1038D】Slime
  2. 清空所有Session
  3. hdu 1527威佐夫博弈
  4. hdu 1269 求连通图的模板题
  5. nginx,tornado,websocket,supervisord配置成型
  6. [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队
  7. CentOS设置程序开机启动程序/服务的方法(转)
  8. Spring MVC 4实现RESTFul WebServices的CRUD实例和使用RestTemplate进行请求(全注解形式配置Web和Filter)
  9. Hadoop2.0之YARN
  10. ArcGIS For Android 的标绘与可视化