最近觉得自己以前写的javascript都是些函数式的编程,复用性很差,于是想开始学习Javascript的面向对象编程。在网上找了一本Object-Oriented JavaScript来开始学习。在学习过程中,顺便把学习笔记写到博客中分享出来。
在这一篇文章中,会把javascript中的基本数据类型和数组的东西分享出来。
在文章的最开始,我需要把我自己的环境给大家介绍一下。
首先,我测试代码时所使用的浏览器是firefox。并在上面安装firebug插件。安装以后,可以在firebug的console上面写javascript并可以立即运行。
然后,在地址栏中输入about:config ,打开以后找到javascript.options.strict 并把它设为true ,这样,在使用一个没有定义的变量时,Firefox的JavaScript engine就会在控制台上生成一条警告信息。这样,环境就配置好了。
下面,我们回到正题。
变量
变量可以定义为字母、数字、下划线的组合,但是不能以数字开头。如:
var thisIsAVariable; // 合法 var _and_this_too; // 合法 var mix12three; // 合法 var 2three4five; // 非法
多个变量可以定义在一个var后面,如:var v1, v2, v3 = 'hello', v4 = 4, v5;
变量名是区分大小写的,比如:
var case_matters = 'lower'; var CASE_MATTERS = 'upper';
这是两个不同的变量。
数据类型
JavaScript中,一共有5种基本数据类型,他们分别是:
- Number--包含浮点型和整型数字。
- String--任意数量的字符组合。
- Boolean--布尔值,有效值为true和false。
- Undefined--当你想访问一个没有定义的变量时,你会得到一个特殊的值undefined,同样的,当你访问一个声明了的,但是没有初始化的变量时,JavaScript会将变量初始化为undefined。
- Null--表示什么也没有,空的。和undefined不同的是,如果一个变量被赋值为null,他仍然是defined,只不过他的值是空的。
除以上5种基本数据类型的数据是object。
使用typeof获得数据类型
如何你想知道一个变量或者值的数据类型,你可以使用typeof操作符来获得一个string类型的 “number”, “string”, “boolean”, “undefined”, “object”, or “function”中的其中一个。比如:
var v1 = 1; typeof v1; //得到"number" typeof typeof v1; //得到"string" 说明typeof返回的是一个string
数字
整数和小数
最简单的数据就是整数和小数了.
var num1 = 100; typeof num1; // "number" num1; // 100 var num2 = 0.73; typeof num2; // "number" num2; //0.73
八进制和十六进制数
var octal = 070; octal; //56 var hex = 0xffff; hex; //65535
字面值
JavaScript 还可以定义一下字面值,比如:
var literal = 1e1; // e用大小写都可以,表示1*101 leteral; // 10 literal = 2e+3 // 表示2*103 literal; // 2000 literal = 2E-3 // 表示2*10-3 literal; //0.002
Infinity
JavaScript中有一个特殊的数字叫Infinity,它表示一个很大的,JavaScript无法处理的数字。Infinity的类型仍然是一个数字,如果你用typeof来看它的数据类型,将会返回”number”。在JavaScript中,能够处理的最大数字为1.7976931348623157e+308,最小的数字为5e-324。下面,我们可以做一下实验。
var infinity = Infinity; infinity; // Infinity typeof infinity; // "number"
可以看出,Infinity也是属于数字
var infinity = 1e308; infinity; // 1e+308 infinity = 1e309; infinity; // Infinity infinity = 6 / 0; infinity; // 当除数为0的时候,一样会输出Infinity infinity = -Infinity; infinity; // -Infinity
那么是否可以用两个 Infinity 相减得到 0 呢?下面我们来试一下 :
Infinity - Infinity // NaN -Infinity + Infinity // NaN
我们可以看出,计算后,得到NaN,并不是0。但是其他的一些运算,最后的结果将会得到Infinity。
Infinity - 20; // Infinity -Infinity * 3; // -Infinity Infinity / 2; // Infinity Infinity - 99999999999999999; // Infinity Infinity - 1e309; // NaN
NaN
NaN到底是什么呢,其实他来自于“Not A Number”。
typeof NaN; // "number"
由此可以看出,它也是number中的一个特殊值。
var a = NaN; a; // NaN
当你在执行一个数学运算的时候,如果运算失败,那么你将获得一个NaN。比如你想用10乘以“f”,这样显然是一个不合法的乘法运算。
10 * "f"; // NaN
同样,如果在你的运算中,含有一个NaN,那么你得到的也将会是NaN。
1 + 2 + NaN; // NaN
String
String的转换
在String中,“+”用来连接两个字符或字符串。但是其他运算符则可以对String进行转换。
var s1 = "one"; var s2 = "two"; var s = s1 + s2; s; // "onetwo" typeof s; // "string" var s = '1'; s = 3 * s; // 3 typeof s; // "number" var s = '1'; s++; // 1 typeof s; // "number"
可见,’1’被自动转换为number了。同样的,如果用String做运算时,运算失败,同样会返回一个NaN。
var d = '101 dalmatians'; d * 1; // NaN
另外,String也可以是Unicode码。
"\u0421\u0442\u043E\u044F\u043D"; // "Стоян"
逻辑操作符
如果在一个非布尔值上使用逻辑操作符,那么这个值会自动转成boolean .
var b = "one"; !b; // false
可见,”one”被自动转成了true。
但是下面5个特殊的值将会被转成false。除此之外的值,将会被转换为true。
他们是:空字符串””,null,0,undefined,NaN。
var b = ""; !b; // true var b = "0"; !b; // false var b = 0; !b; // true var b = null; !b; // true var b = "false"; !b; // false var b = "NaN"; !b; // false var b = NaN; !b; // true
值得一提的是,当遇到和非boolean值进行逻辑运算的时候,这个非boolean值将会作为结果返回。比如:
true || "aaa"; // true true && "aaa"; // "aaa"
考虑代码的可读性,这样的代码应该尽量避免。
比较
另外还有几种操作符运算以后会返回boolean的。==,===,!=,!==,>,>=,<,<=。
下面针对==,===,!=,!==来解释一下。
==,!=用于判断两个值是否相等或不等,对于不同类型的值比较时,将会被转换为相同类型的,再进行比较。比如:
1 == '1'; // true
===,!==用于判断两个值是否相等或不等,并且还要比较数据的类型是否相同或不同,对于不同类型的值比较时,类型不会被转换,直接返回false。比如:
1 === '1'; // false
另外,比较特殊的是NaN,他不等于任何的值,包括他自己。
NaN == NaN; // false
undefined和null
当你使用一个未定义或者定义了但是没有被初始化的值时,你将会得到undefined。javascript在定义变量时,默认给变量初始化为undefined。
foo; // ReferenceError: foo is not defined typeof foo; // "undefined"
不同的是,如果是使用一个定义了,但是没有被初始化的变量。你讲不会得到错误信息。
var foo; foo; // undefined typeof foo; // "undefined"
另一方面,对于null。它不会被javascript在后台赋予某个变量,只能是靠我们的代码赋值。
var foo = null; foo; // null typeof foo; // "object"
还有, 用==比较时,undefined和null是相等的。
undefined == null; // true undefined === null; // false
虽然null和undefined的区别并不太大,但是在某些时候确实是很重要的。比如在数学运算中,会得到不同的结果。
1+undefined; // NaN 1+null; // 1
这是由于null和undefined转换的基本数据类型不同造成的。
数组
对于数组的一些基础知识就不在此多说了。
值得注意的是在删除数组元素时,并不会真的删除掉这个元素,而是把元素值设为undefined。删除之后,数组的长度不变。
var array = [1,2,3]; array; // [1, 2, 3] delete array[2]; // true array; // [1, 2, undefined] array.length; // 3
另外,你也可以使用数组来访问string中的当个字符。
var str = "abcd"; str[1]; // "b"
总结: 在本文中介绍的都是一些比较基础的知识,在下一次的文章中,我会把函数部分的知识分享出来。由于平时工作比较忙,我也是自己抽时间来学习的。有什么不足之处,还望高手们提醒。谢谢。
未完,待续。。。