第二章 类型、值和变量

第二章   类型、值和变量

          Javascript的数据类型分为两类:原始数据类型(数字、字符串、布尔值和两个特殊的原始值:null和undefine)和对象类型(是属性的集合,一种特殊的对象类型:函数)

2.1 数字

   (1)javascript不区分整数值和浮点数值,javascript中的所有数字均以浮点数值表示。能表示的整数范围为:-2的53次方到2的53次方,包含边界值;注意:javascript中的实际操作值是32位整数;某些javascript十几支持八进制直接量,而有些不支持,所以尽量不要使用;

(2)浮点型直接量:采用传统的实数写法,由整数部分,小数点和小数部分组成;

(3)javascript中的算术运算符

          加法运算符、减法运算符、乘法运算符、除法运算符、求余运算符;还有通过Math对象属性定义的函数和常量来实现的

(4)javascript预定义了全局变量Infinity和NaN。用来表示正无穷大和非数字值;

(5)javascript中的非数字值,它和任何值都不想等,包括自身;

(6)二进制浮点数和四舍五入错误:javascript采用IEEE=754浮点数表示法,这种二进制表示法,可以精确表示分数,二进制浮点数表示方法并不精确表示类似0.1这样简单的数字;

2.2 文本

(1)字符串是一组由16位值组成的不可变的有序序列,每个字符通常都表示来自于Unicode字符集;javascript通过字符串类型表示文本;

(2)字符串常量:有单引号或双引号括起来的字符序列;当使用单引号来定界字符串时,需要格式外注意单引号和撇号,因为都是同一个字符,所以使用反斜线来转义所有的撇号。

(3)字符串的使用:javascript中字符串连接,使用的是“+”号;javascript中的字符串是固定不变的;

(4)模式匹配:javascript定义了RegExp()构造函数,用来创建表时文本匹配漠视的对象,这些模式称为这规则表达式;string和RegExp对象均定义了利用正则表达式进行模式匹配和查找与替换的函数。

2.3 布尔值:包含tostring()方法,因此可以使用这个方法将字符串转换为true或者false,但它幷包含其他有用的方法;

2.4 null和undefined

(1)null是javascript语言的关键字,表示一个特殊值,通常是空值;如果查询对象属性或数组元素的值返回一个undefined则说明这个属性元素不存在。

(2)如果想将他们赋值给变量或者属性,或将他们作为参数传入函数,最佳选择使用null

2.5 全局对象

   (1)全局对象的属性是全局定义的符号,javascript程序可以直接使用,当javascript解释器启动时,他将创建一个新的全局对象,并给他一组定义的初始属性;

(2)全局变量的初始属性并不是保留字,但他们应该当作保留字对待

(3 )在客户端javascript中,window对象充当了全局对象,引用其自身,可以代替this来引用全局变量,window对象定义了全局属性;

2.6 包装对象

(1)javascript对象是一种复合值:他是属性或已命名值得集合。通过“.”符号来引用值;

(2)存取字符串、数字和布尔值的属性时创建的临时对象称为包装对象,他只是偶尔用来区分字符串值和字符串对象、数字和数值对象以及布尔值和布尔对象。

(3)javascript会在必要时将包装对象转换成原始值,“==”等于运算符将原始值和其包装对象看作相等,但“===”全等运算符视为不等(通过typeof运算符可以看到原来的原始值和其包装对象不同);

2.7 不可变的原始值和可变的对象引用

(1)原始值是不可更改的:任何方法都无法更改一个原始值;原始值的比较是指的比较,只要它们的值相等,就是为相等;

(2)对象和原始值的不同:对象的值是可变的,对象的比较时引用的比较,当且仅当他们引用同一个基对象时才相等;如果相比较两个单独的对象和数组,则必须比较他们的属性和元素;

2.8 类型转换

(1)原始值到对象的转换可以通过调用string()、Number()或Boolean()构造函数,转换为他们各自的包装对象;

(2)一个值转换为另一个值,并不意味着两个值相等。

(3)显示类型转换:最简单的方法就是使用Boolean()、Number()、String()和Object()函数;javascript中的隐式类型转换,有时用于类型转换;

(4)对象转换为原始值:所有的对象继承了两个转换方法,一个是tistring(),另一个是valueof()

(5)javascript中首先尝试使用valueof()方法,如果对象具有这个方法,返回一个原始值,则javascript将这个值转换为数字并返回,如果没有这个方法就tostring()方法,将其转换并返回,否则抛出一个类型错误异常;

(6)数组继承了valueof()方法,返回的是对象,不是原始值,所以数组用tostring()方法;

(7)日期函数是javascript中唯一预先定义的类型,它定义了有意义的像字符串和数字类型的转换。对非日期对象来说对象到原始值基本上是对对象到数字的转换;通过walueof和tostring方法返回的原始值将被直接调用,而不被强制转换为数字或字符串;

2.9 变量声明

(1)在javascript中使用一个变量需先声明,在这里使用关键字var声明;如果声明一个变量没有付初始值,则这个变量就是undefined

(2)重复的声明一个具有初始化的变量,就如同一个简单的赋值语句,如果一个为声明变量赋值,javascript会给全局变量创建一个同名的属性,并且他工作起来像一个正常的全局变量

2.10 变量作用域

(1)在函数体中,局部的变量优先级全局变量;

(2)花括号内的每一段代码都具备各自的作用域,而且变量在声明它代码段之外是不可见的,称为块级作用域;

(3)将函数体内部的变量声明提前到函数整体的顶部,同时变量初始化留在原来的位置;

(4)作用域链:是一个对象列表或者链表,这组对象定义了这段代码作用域中的

变量;当javascript查找变量x的值时,会从链表的第一个开始查,一直往下查,如果没有,就抛出一个引用错误;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章