学习面向对象javascript(一)基本数据类型和数组

最近觉得自己以前写的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"

 

总结: 在本文中介绍的都是一些比较基础的知识,在下一次的文章中,我会把函数部分的知识分享出来。由于平时工作比较忙,我也是自己抽时间来学习的。有什么不足之处,还望高手们提醒。谢谢。

 

未完,待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值