JavaScript类型、值和变量

来源:互联网 发布:四川网络电视台节目表 编辑:程序博客网 时间:2024/05/16 09:25

JavaScript类型、值和变量

计算机程序中需要对值(value)进行操作。在编程语言中,能够表示并操作的值的类型称作数据类型(type),编程语言最基本的特性就是能够支持多种数据类型。当程序需要将值保存起来以备将来使用时,便将其复制给一个变量(variable)。变量是一个值得符号名称,可以通过名称来获得对值得引用。变量的工作机制是编程语言的另一个基本特性。


JavaScript的数据类型分为两类,原始类型(primitive type)对象类型(object type)。JavaScript中的原始类型包括数字字符型布尔值


JavaScript中有两个特殊的原始值:null(空)和undefined(未定义),他们不是数字、字符串和布尔值,他们通常分别代表了各自特殊类型的唯一成员。


JavaScript中除了数字、字符串、布尔值、null和undefined之外就是对象了。对象(object)是属性(property)的集合,每个属性都由“名/值对”(值可以是原始值,比如数字、字符串、也可以是对象)构成。其中有一个比较特殊的对象--全局对象(global object)


普通的JavaScript对象是“命名值”的无序集合。JavaScript同样定义了一种特殊对象--数组(array),标示带编号的值得有序集合。JavaScript为数组定义了专用的语法,使数组拥有一些和普通对象不同的特有行为特性。


JavaScript还定义了另一种特殊对象--函数。函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。和数组一样,函数的行为特征和其他对象都不一样。JavaScript为使用函数定义了专用语法。对于JavaScript函数来讲,最重要的是,它们都是真值,并且JavaScript可以将它们当做普通对象来对待。


如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。每个构造函数定义了一类(class)对象--由构造函数初始化的对象组成的集合。类可以看做是对象类型的子类型。除了数组(Array)类和函数(Function)类之外,JavaScript语言核心定义了其他三种有用的类。日期(Data)类定义了代表日期的对象。正则(RegExp)类定义了正则表达式(一种强大的模式匹配工具)的对象。错误(Error)类定义了那些标识JavaScript程序中运行时错误和语法错误的对象。可以通过定义自己的构造函数来定义需要的类。


JavaScript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收(garbage collecion)。这意味着程序可以按需创建对象,解释器就会知道这个对象没有用了,然后自动回收它所占用的内存资源。


JavaScript是一种面向对象的语言。不严格地讲,这意味着我们不用全局的定义函数去操纵不同类型的值,数据类型本身可以定义方法(method)来使用值。例如,要对数组a中的元素进行排序,不必要将a传入sort()函数,而是调用a的一个方法sort():

a.sort(); //sort(a)的面向对象版本

只有null和undefined是无法拥有方法的值


JavaScript的类型可以分为原始类型和对象类型,也可以分为可以拥有方法的类型和不能拥有方法的类型,同样可以分为可变(mutable)类型和不可变(immutable)类型。可变类型的值是可以修改的。对象和数组属于可变类型:JavaScript程序可以更改为对象属性值和数组元素的值。数字、布尔值、null和undefined属于不可变类型--比如,修改一个数值的类容本身就说不通。字符串可以看成由字符组成的数组,你可以认为它是可变的。然而在Javascript中,字符串是不可变的:可以访问字符串任意位置的文本,但JavaScript并未提供修改已知字符串文本内容的方法。


JavaScript可以自由的进行数据类型转换。比如,如果在程序期望使用字符串的地方实用类数字,JavaScript会自动将数字转换为字符串。如果在期望使用布尔值的地方实用了非布尔值,JavaScript也会进行相应的转换。


JavaScript变量是无类型的(untyped),变量可以被赋予任何类型的值,同样一个变量也可以重新赋予不同类型的值。实用var关键字来申明变量。JavaScript采用此法作用于(lexical scoping)。不在任何函数内声明的变量称作全局变量(global variable) ,它在JavaScript程序中的任何地方都是可见的。在函数内申明的变量具有函数作用域(function scope),并且只在函数内可见。


1、数字

JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均为浮点数值表示。JavaScript采用IEEE 754标准,整数范围(-2^53~2^53)包含边界值。如果超出了这个范围的整数,则无法保证低位数字的精度。然而实际操作中则是基于32位整数。


1.1 整型直接量

除十进制数可以被JavaScript直接识别以外,JavaScript同样可以识别十六进制(以16为基数)值。所谓十六进制的直接量是以“0x”或“0X”为前缀,气候跟随十六进制直接量。十六进制是0~9直接的数字和a(A)~f(F)之间的字母构成,a~f的字母对应的表示数字10~15。

尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以允许采用八进制(基数为8)形式表示整数。八进制直接量是以数字0开始,气候跟随一个由0~7(包括0和7)之间的数字组成的序列,例如:

0377 //3*8^2+7*8^1+7*8^0=255(十进制)

1.2 浮点型直接量

浮点型直接量可以含有小数点,他们采用的是传统的实数写法。一个实数由整数部分、小数点和小数部分组成。

例如:

3.14

2345.789

.33333333

6.02e23 //6.02*10^23

1.42E-12 //1.42*10^-12


1.3JavaScript中的算术运算

JavaScript程序是使用语言本身提供的算术运算符来进行数字运算的。这些运算符包括:+、-、*、/、%。

除了基本运算符之外,JavaScript还支持更加复杂的算术运算,这些复杂运算通过作为Math对象的属性定义的函数和常量来实现:


1.4二进制浮点数和四舍五入错误

实数有无数个,但是JavaScript通过浮点数的形式只能表示其中有限的个数(准确地说是18 437 736 874 454 810 627个)。也就是说,当在JavaScript中使用实数的时候,常常只有真实值的一个近似表示。


JavaScript采用了IEEE-754浮点数表示法(几乎所有现代编程语言所采用),这只是一种二进制表示法,可以精确地表示二进制分数,比如1/2、1/8和1/1024。遗憾的是,我们常用的分数,特别是金融方面,都是十进制分数1/10、1/100等。二进制浮点数表示法并不能精确表示类似0.1这样简单的数字。


JavaScript中的数字具有足够的精度,并可以几期近似于0.1。但事实是,数字不能精确表述的确带来了一些问题。看下面这段代码:

var x = 0.3 - .02;//30美分减去20美分var y = 0.2 - 0.1;//20美分减去10美分x == y;// =>false:两个值并不相等!x == 0.1;// =>false:0.3 - 0.2不等于0.1y == 0.1;// =>true:0.2-0.1等于0.1

由于舍入误差,0.3和0.2之间的近似差值实际上并不等于0.2和0.1之间的近似差值。

故在使用中尽可能使用整数而不是小数。


1.5日期和时间

JavaScript语言核心包括Data()构造函数,用来创建表示日期和时间的对象。这些日期对象的方法为日起计算提供了简单的API。日期对象不像数字那样是基本数据类型。下面给出一些对日期对象的简单教程:

varthen = new Data(2011 , 0 , 1);//2011年1月1日varlater = new Data(2011 , 0, 1, 17, 10 ,30);//2011年1月1日当地时间5:10:30pmvarnow = new Data();//当前日期和时间varelapsed = now - then;//日期减法:计算时间间隔的毫秒数later.getFullYear();// =>2011later.getMonth();// =>0:从0开始计数月份later.getData();// =>1:从1开始计数天数later.getDay();// =>:得到星期几,0代表星期天,5代表星期五later.getHours();// =>:当地时间17:5pmlater.getUTCHours();// =>:使用UTC表示小时的时间,基于时区

2、文本

字符串(string)是由一组由16位值组成的不可变得有序序列,每个字符通常来自于Unicode字符集。JavaScript通过字符串类型来表示文本。字符串的长度(length)是其所含16位值的个数。JavaScript字符串(和其他数组)的索引从零开始:第一个字符的位置是0,第二个字符的位置是1,以此类推。空字符串的长度为0,JavaScript中并没有表示单个字符的“字符型”。要表示一个16位值,只需要将其复制给字符串变量即可,这个字符串的长度为1。


2.1字符串直接量

在JavaScript程序中的字符串直接量,是由单引号或双引号括起来的字符序列。由单引号定界的字符串中可以包含双引号,由双引号定界的字符串中可以包含单引号。


2.2转义字符

\o NULL字符

\b 退格符

\t 水平制表符

\n 换行符

\v 垂直制表符

\f 换页符

\r 回车符

\" 双引号

\' 单引号

\\ 反斜线

\xXX 由两位十六进制数XX指定的Latin-1字符

\uXXXX 由4位十六进制数XXXX指定的Unicode字符


2.3字符串的使用

JavaScript的内置功能之一就是字符串链接。如果将加号(+)运算符用于数字,表示两数相加。但将它作用于字符串,则表示字符串连接,将第二个字符串拼接在第一个之后,例如:

msg = "Hello, " + "world";//生成字符串 “Hello, world”

greeting = "Welcome to mu blog, " + " " + name;

要确定一个字符串的长度--其所包含的16位值的个数--可以使用字符串的length属性。比如,要得到字符串s的长度:

s.length

除了length属性,字符串还提供许多可以调用的方法。


包装对象

JavaScript对象是一种复合值:它是属性或已命名值的集合。通过“.”符号来引用属性值。当属性值是一个函数的时候,称其为方法。通过o.m()来调用对象o中的方法。




















1 0
原创粉丝点击