第三章 基本概念
一、区分大小写
ECMAScript中的一切(变量、函数名和操作符)都区分大小写
二、标识符(变量、函数、属性的名字、函数的参数)
(1)第一个字符必须是一个字母、下划线(-)或一个美元符号($)
(2)其他字符可以是字母、下划线、美元符号或者数字
(3)采用驼峰大小写格式:第一个字母小写,剩下的每个单词的首字母大写
例如:firstSecond
三、注释
单行注释: //
多行注释:
/*
*
*
*/
四、严格模式
为javacript定义了一种不同的解析与执行模型。在严格模型下,一些不确定的行为将得到处理,而且不安全的操作也会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加以下代码:
"use strict" (相当于编译提示)
在函数内部的上方包含这条编译提示,也可以在函数严格模式下执行
function doSomething () {
"use strict";
//函数体
}
五、语句
ECMAScript中语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。
不要省略;
六、关键字和保留字 p21
不能用作标识符
p21
七、变量
定义:ECMA的变量是松散型的,可以用来保存任何类型的数据。每个变量仅仅是一个用于保存值得占位符。
语法:
(1)
var message;
未经初始化的变量,该变量可以保存任何值。系统默认给message赋值undefined
(2)
var message="hi";
向这一初始化变量并不会把它标记为字符串类型。初始化的过程是给变量赋一个值。因此,可以在修改变量值的同时修改值的类型。
(3)一条语句定义多个变量
var message="hi",
found=false,
age=29;
注意:
用var 定义的变量是局部变量,省略var定义的变量是全局变量(不推荐使用)
八、数据类型
ECMAScript
5种简单数据类型:Undefined、Null、Boolean、Number和String
1种复杂数据类型:objecgt
Undefined
定义:underfined类型只有一个值,它本身。在声明变量未初始化时,这个变量的值就是undefined。
引入目的:引入这个对象是为了正式区分空对象指针与未经初始化的指针。
注意:typeof检测为声明,或者声明后未被赋值的变量返回的都是undefined
Null类型
定义:
Null:空对象指针
var car = null;
alert(typeof car);
typeof检测null值会返回"object"
注意:如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的对象是否已经保存了一个对象的引用。
Undefined、Null的区别
undefined值派生自null,尽管null和undefined有这样的关系,但它们的用途完全不同。只要意在保存对象的变量还没有真正保存对象,就应该明确地让变量保存null值。
Boolean类型
定义:该类型只有两个字面值:true和false。但是true不一定等于1,而flase不一定等于0
转换规则
数据类型 |
true |
false |
Boolean |
true |
Flase |
String |
任何非空字符串 |
" "(空字符串) |
Number |
任何非零数字值 |
0和NaN |
Object |
任何对象 |
Null |
Undefined |
不适用 |
undefined |
注意:True和False都不是Boolean值,知识标示符
Number类型
数字的数据类型:
一、整数
(1)十进制: var intNum = 55;
(2)八进制:以0开头 var octalNum1 = 079;
(3)十六进制:以0x开头 var hexNum1 = 0xA;
在算术运算时,所有八进制和十进制表示的数值最终都将被转换成十进制
二、浮点数
该数值中必须包含一个小数点,并且小数点后面必须至少有一个数字
var floatNum1 = 1.1;
由于保存浮点数值需要的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数值转换为整数值。
科学计数法:
使用大写或者小写的字母E
例如:
var floatNum1 = 3.125e7
在默认情况下,ECMAScript会将小数点后面带有6个零以上的浮点数值转换为以e表示法表示的值
浮点数值得最高精度是17位小数,但在进行算术计算时其精度远远不如整数。会产生误差。例如0.1+0.2=0.30000000000000004
三、NaN(Not a Number)
这个数值用于表示一个本来要返回数值的操作数为返回数值的情况。
特点:
(1):任何涉及NaN的操作都会返回NaN
(2):NaN与任何值都不相等。包括NaN本身
isNaN(): 确定这个参数是否“不是数值”。在接收参数后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。例如字符串“10”或Boolean
alert (isNaN("10")); //false
alert(isNaN("blue")); //true
事实上,只有0除以0才会返回NaN,整数除以0返回Infinity,负数除以0返回-Infinity。
数值范围:
最小数值保存在 Number.Min_VALUE中 其值为5e-324
最大数值保存在 Number.Max-VALUE中 其值为 1.7976931348623157e+308
假如超出这个范围,这个数值将被转换成Infinity(正无穷)、-Infinity(负无穷)
假如要想确定一个数值是不是有穷的,可以使用isFinite()函数。这个函数值在参数位与最小值与最大数值之间会返回ture
isNaN()也适用于对象。基于对象调用isNaN()函数时,会首先调用对象的valueof()方法,然后确定该对象返回的值是否转换为数值。如果不能,则基于这个返回值在调用toString()方法,再测试返回值。
数值转换
有三个函数能把非数值转换为数值: Number()、parseInt()、 ParseFloat()
Number() :适用于任何数据类型
parseInt()、ParseFloat():专门把字符串转换成数值
Number()函数转换规则:
(1):如果是Boolean值,true和false将分别转换为0和1
(2):如果是数字值,只是简单的传入和返回
(3):如果是Null值,则返回0
(4):如果是undefined,返回NaN
(5):如果是字符串,遵守以下规则
1)如果字符串只包含数字,则将其转换为十进制数字。
“123”-> 123 ,"011"会变成11 会忽略前导的0
2)如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值 会忽略前导0
3)如果字符串包含有效的16进制数值,例如"0xf",则将其转换为相同大小的十进制数值。
4)如果字符串是空的,则将其转换为0
5)如果字符串包换除上述格式之外的字符,则将其转换为NaN.
(6):如果是对象,则调用对象的valueof()返回值。如果结果是NaN,则调用对象的toString()方法,然后再次按照前面的规则转换为相对于的字符。
parseInt()函数:
由于Number()函数在转换字符串是比较复杂而且不够合理,因此在处理整数时候更常使用的是parseInt()函数。
parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。会忽略字符串前的空格,直至找到第一个非空字符。
(1)如果第一个字符不是数字符号或者负号,parseInt()函数就会返回NaN
(2)如果第一个字符是数字,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。
例如: "1234blue"->1234
"blue"->会被完全忽略
(3)如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种正式格式
1)如果字符串以"0x"开头而且后面跟着数字,就会当作一个十六进制整数
var num1 = parseInt ("0xA"); ->10
2 ) 如果字符串以"0"开头而且后面跟着数字,就会当作一个八进制整数
var num2 = parseInt("070"); ->56
3)其它
var num1 = parseInt("1234blue") ->1234
var num3 = parseInt("22.5") ->22
在使用parseInt()解析像八进制字面量的字符串时,ECMAScript3和5存在分歧。例如
Var num = parseInt("070");
// ECMAScript3 认为是56(八进制) ECMAScript5 认为是70(十进制)
原因:ECMAScript5中parseInt()已经不具备有解析八进制值的能力,因为前导的0会被认为无效。
解决:
可以为这个函数提供第二个参数:转换时的基数(即多少进制)。如果知道要解析的值是十六进制格式的字符串,那么指定16作为第二个参数。
var num = parseInt("0xAF",16); //175
实际上,如果指定了16作为第二个参数,字符串可以不带前面的"0x",如下所示:
var num1 = parseInt("AF",16) //175
指定基数会影响到转换的输出结果:
var num = parseInt("10",2 ); //2
var num = parseInt("10" ,8); //8
var num = parseInt("10" ,10); //10
var num = parseInt("10" ,16); //16
建议在无论在什么情况下都要指定基数
parseFloat() :是从第一个字符位置开始解析每个字符,而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符。也就是说,字符串的第一个小数点是有效的,而第二个小数点就是无效的。因此它后面的字符串将被忽略。
例如:
"22.34.5" ->22.34
parseInt()函数 和 parseFoat()函数的区别:
(1)parseFloat()第一个小数点有效
(2)parseFloat()会忽略前导0,只能解析10进制,不能指定第二个参数制定基数的用法。
(3)parseFloat()如果字符包含的是一个可解析为整数的字符串,会返回整数。
例子:
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0xA"); // 0
var num3 = parseFloat("22.5.34"); //22.5
String类型
一、表示:
(1)双引号 “”
var firstName = "Nichoas";
(2)单引号 ‘ ‘
var lastName = "Zakas";
var lastName= ‘Zakas‘;
二、字符串面量
字面量 |
含义 |
\n |
换行 |
\t |
制表 |
\b |
退格 |
\r |
回车 |
\f |
进纸 |
\\ |
斜杠 |
\‘ |
单引号‘ |
\" |
双引号“ |
\xnn |
以十六进制代码nn表示一个字符。\x41 表示"A" |
\unnnn |
以十六进制代码nnnn表示的一个Unicode字符。 |
三、特点
串是不可变的,也就是说,字符串一点创建,它们的值就不能改变。要改变某变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值得字符串填充该变量。
四、常用的属性和方法
1、属性
length属性:计算字符串的长度
text.length
2、方法
(1)tostring()
数值、布尔值、对象和字符串值都含有这个方法。但是null和undefined值没有这个方法。在多数情况下,调用tostringI()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。默认情况下,toString()方法以十进制格式返回字符串表示。通过传递基数,toString()可以输出以二进制、八进制、十进制乃至其他任意有效进制
var num = 10;
alert( num.tostring()); 默认十进制// "10"
alert( num.tostring(2)); //"1010"
alert( num.tostring(8)); //"12"
alert( num.tostring(10)); //"10"
alert( num.tostring(16)); //"a"
2)String()
在不知道要转换的值是不是null和undefined的情况下,还可以使用转型函数String(),这函数能将任何类型的值转换为字符串。
转换规则:
(1)如果值有toString()方法,则调用该方法,并判断返回的值
(2)如果是null,则返回null
(3)如果是undefined,则返回"undefined".
Object类型
定义:对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。创建对象的实例并为其添加属性和方法
例:
var o = new object();
不给构造函数传递参数时,则可以省略后面的那一对圆括号(不推荐使用)
object的每个实例都具有以下属性和方法。
valueof(): 返回对象的字符串、数值、布尔值表示。
toString(): 返回对象的字符串表示。
object是所有对象的基础。
八、操作符
算术操作符、位操作符、关系操作符和相等操作符。他们可以使用很多值,例如:字符串、数字值、布尔值、甚至对象。在应用于对象时,相应的操作符通常都会调用对象的valueof()方法和(或)toString()方法
一元操作符
1、递增、递减操作符
类型:前置型++i 后置型i++
- -i i--
区别:
后置是操作是在包含它们的语句执行之后才执行的。
使用规则:不仅可以适用于整数,还可以用于字符串、布尔值、浮点数值和对象
1)在应用于一个包含有效数字符的字符串时,现将其转换成数字,在执行相应操作
2)在应用于不包含有效数字字符的字符串时,将变量的值设为NaN。字符串变量变成数值变量
3)布尔值false,将其转换为0,再执行相应的操作
4)布尔值true,先将其转换为1,再执行相应的操作
5)应用于浮点数值时,执行加减1操作
6)应用于对象,先调用对象的valueOf()方法,取得一个可操作的值。如果返回的结果是NaN,则再调用toString()方法
2、一元加和减操作符
一元加:
+num;
1)放在数值前面,对数值不会产生影响
2)放在非数值的应用一元加操作符,该操作符会像Number()转型函数一样对这个值先执行转换
例:
例: var s3 = "z";
s3 = +s3 //值变成NaN
一元减操作符:主要用于表示负数
1)放在数值时,会变成相反数
2)非数值时,一元减操作符与一元加具有相同的规则。
位操作符
位操作符不直接操作64位的值,先是将64为的值转换成32整数,然后执行操作,最后将结果转换为64位。
对于有符号的数,前31位表示整数的值,第32位表示符号位。0表示整数,1表示负数。
正数和负数都是以二进制数,但负数是以二进制补码存储。
1、按位非(NOT)
表示:~ 结果就是返回数值的反码
本质:操作数的负值-1
var num1 = 25;
var nmu2 = ~num1; //-26
2、按位与(AND)
表示:&
规则: 两个数值的对应位都是1时才返回1,任何一位是0则返回0
3、按位或(OR)
表示:|
4、按位异或
表示:^
规则:操作在两个数值对应位上只有一个1时才返回1,如果对应位都是1或者都是0,则返回0
5、左移
左移不会影响符号位
例:
var oldValue = 2; //二进制10
var newValue << 5; //二进制1000000,十进制64
假如-2左移5为,结果是-64,不是64
6、右移
(1)有符号的右移:用符号位填补空位
(2)无符号位右移: 用0来填充空位
布尔操作符
1、逻辑非
表示:!
规则:
(1)操作数是一个对象,返回false;
(2)操作数是一个空字符串,返回true;
(3)操作数是非空字符串,返回false;
(4)操作数是0,返回true;
(5)任意非0 的数(Infinity),返回false;
(6)操作数是null,返回true;
(7)操作数是NaN,返回true;
(8)操作数是undefined,返回true
2、逻辑与
表示: &&
真值表:两个操作数同时为真时,结果为真。否则为假
规则:
1)如果第一个操作数是对象,则返回第二个操作数;
2)如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象
3)如果两个操作数有一个是null,则返回null;
4)如果有一个操作数是undefined,则返回undefined
5)如果有一个操作数是NaN,则返回undefined.
特性:逻辑与操作数是短路操作,如果第一个数是false,则不会执行第二个操作数
3、逻辑或
符号:||
真值表:有一个为真即为真,否则为假
规则:
1)如果第一个操作数是对象,则返回第一个操作数
2)如果第一个操作数的求值结果为false,则返回第二个操作数
3)如果连个操作数都是对象,则返回第一个操作数;
4)如果连个操作数都null,则返回null;
5)如果两个操作数都是NaN,则返回NaN;
6)如果连个操作数都是undefined,则返回undefined
特点:短路操作符,第一个操作符为true时,不会对第二个操作数求值。
乘性操作符
乘性操作符:乘法、除法、求模。
在操作数为非数值的情况下会执行自动的类型转换。后台会调用Number()转型函数转换为数值,空字符串将被当做0,true将被当做1
1、乘法
表示:*
规则:
(1)如果操作数都是数值,执行常规长发计算
(2)如果有一个数是NaN,则结果是NaN
(3)如果是Infinity与0相乘,结果是NaN
(4)如果是Infinity与非0相乘,结果是Infinity或-Infinity,取决于有符号操作数的符号
(5)如果Infinity与Infinity相乘,则其结果是Infinity;
(6)如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
2、除法
符号:/
(1)如果操作数都是数值,执行除法计算
(2)如果有一个操作数是NaN,则返回NaN
(3)如果是Infinity被Infinity除,结果是NaN
(4)如果是0被0除,结果是NaN;
(5)如果是非0的有限数被0除,则结果是Infinity或-Infinity,取决于有符号操作数的符号。
(6)如果是Infinity被任何非0数值出,则结果是Infinity或-Infinity,取决于有符号的操作数的符号
(7)如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则。
3、求模
符号:%
规则:
(1)如果操作数都是数值,执行常规的除法运算
(2)如果被除数是无穷大的数而除数是有限大的数值,则结果是NaN
(3)如果被除数是有限大的数值而除数是0,则返回NaN
(4)如果是Infinity被Infinity除,记过是NaN
第四章 变量、作用域和内存问题
一、Javascript变量可以用来保存两种类型的值:
(1)基本数据类型:Undifined、Null、Boolean、Number、String
(2)引用对象类型
特点:
1)内存中占据固定大小的空间,被保存在栈内存中
2)从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
3)引用类型的值是对象,保存在堆内存中
4)包含引用类型值得变量实际上包含的不是对象本身,而是指向该对象的指针
5)从一个变量向另一个变量复制引用类型的值,复制的是指针,因此两个变量最终都指向同一个对象
6)确定一个值是那种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。
二、变量的执行环境
所有的变量都存在一个执行环境(也称为作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。
(1)环境有全局执行环境(全局环境)和函数执行环境之分;
(2)每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链
(3)函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含父环境,乃至全局环境;
(4)全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
三、JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必担心内存分配和回收问题。
(1):离开作用域的值将被自动标记为可回收,因此将在垃圾收集期间被删除
(2):“标记清除”是目前主流的垃圾回收算法,给当前不使用的值加上标记,然后再回收其内存
(3):“引用计数”跟踪记录所有值被引用的次数。Javascript引擎目前都不再使用这种算法;但在IE中访问非原生JavaScipt对象时,这种算法仍然会导致问题
(4):当代码中存在循环引用对象时,“引用计数”算法就会导致问题。
(5):解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用
第五章 引用类型
一、Object类型
Object类型是所有它的实例的基础。
Object的每个实例的属性和方法
属性:
(1)constuctor: 保存着用于创建当前对象的函数
(2)hasOwnProperty:用于检测给定的属性在当前对象实例中是否存在
(3)isPrototypeOf(object):用于检测传入的对象是否是传入对象的原型
(4)PropertyIsEnumerable(propertyName): 用于检查给定的属性是否能够使用for-in语句来枚举
方法:
(1)toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
(2)toString():返回对象的字符串表示
(3)valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
创建方式:
(1):使用new操作符后跟Object构造函数
var person = new Object();
person.name = "Nicholas";
person.age = 29;
(2):使用对象字面量方法
var person = {
name : " Nicholas ",
age = 29
};
访问属性的两种方法:
person["name"]
person.name
方括号的有点:可以通过变量来访问属性
例如:
var propertyName = "name";
alert (person[propertyName]);
二、Array类型
ECMAScript数组的每一项可以保存任何类型的数据。
创建数组的两种方式:
(1)使用Array()构造函数
var colors = new Array(20);
var colors = new Array("red","blue","green");
(2)数组字面量表示法
var colors = ["red","blue","green"];
修改、新增
var colors = ["red","blue","green"]
colors[2] = "black"; //修改
colors[3] = "brown" //新增
属性
length:保存数组的项数
例:
var colors = ["red","blue","green"];
alert(colors.length); //3
检测数组
(1) if (value instanceof Array) {
//对数组执行某些操作
}
(2)if (Array.isArray(value)) {
//对数组执行某些操作
}
转换方法:
(1)toString(); 返回由数组中的每个值得字符串形式拼接而成的一个以逗号分隔的字符串
(2)valueOf(); 返还的还是数组
(3)toLocaleString();
例:var colors = ["red","blue","green"];
alert(colors.toString()); //red,blue,green
alert(colors.valueOf()); //red,blue,green
栈方法:LIFO(last-in-fisft-out)
插入和移除数据,只发生在栈的顶部
(1)push() 可以接收任意数量的参数,把它们逐个添加到数组的末尾
(2)pop() 从数组末尾移除最后一项
队列方法:FIFO(first-in-first-out)
队列列表的尾端添加项,从列表的前端移除项
(1)push() 可以接收任意数量的参数,把它们逐个添加到数组的末尾
(2)shift() 移除数组的第一个项并返回该项
重排序方法:
(1)reverse(): 反转数组的顺序
(2)sort :按升序顺序排列数组
操作方法:
(1)contact(): 先创建当前数组一个副本,然后将接收到的参数添加大这个副本的末尾
(2) slice(): 基于当前数组的一项或者多项创建新数组
slice(x,y) x:起始位置y: 结束位置
(3)splice()
删除:splice(x,y) x:删除的第一项的位置 y:要删除的项数
插入:splice(x,0,z) x:起始位置 0(要删除的项数) z:要插入的项
替换:splice(x,y,z) x:起始位置 y(要删除的项数) z:要插入的项
位置方法:
(1)indexOf():从头开始向后找
(2)lastIndexOf(): 从末尾开始往前找
迭代方法:
every()
filter()
forEach()
map()
some()
归并方法:
reduce(): 从数组的第一项开始,逐个遍历到最后
reduceRight(): 从数组的最后一项开始,逐个遍历到第一项
三、Date类型
Date类型是早期java中的java.util.Date类基础上构建的。Date类型保存的日期能够精确到1970年1月1日之前或之后的100000000年
创建对象:
var now = new Date();
新建的对象自动获得当前的日期和时间。
如果想根据给特定的日期和时间创建日期对象,必须传入该日期的毫秒数
(1)Date.parse() 表示接收一个日期的字符串参数
(2)Data.UTC() 返回表示日期的毫秒数
例:var someDate = new Date(Date.parse("May 25,2004"));
//GMT时间2000年1月1日午夜零时
var y2k= new Date(Date.UTC(2000,0))
//GMT时间2005年5月5日下午5:55:55
(3)ECMAScript添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。这个方法简化了使用Date对象分析代码的工作
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = Date.now(),
result = stop -start;
继承的方法
toLocaleString():会按照与浏览器设置的地区相适应的格式返回日期和时间
toString(): 返回带有时区信息的日期和时间
valueOf(): 返回日期的毫秒数
日期格式化方法:
toDateString() 以特定于实现的格式显示星期几、月、日和年
toTimeString() 以特定于实现的格式显示时、分、秒和时区
日期/时间组件的方法
P102
四、RegExp类型
表达式:
var expression=/ pattern/ flags ;
pattern: 任何简单或者复杂的正则表达式
flags:
g:表示全局模式模式
i: 表示不区分大小写模式
m: 表示多行模式
实例属性:
global: 布尔值,表示是否设置了g标志
ignoreCase: 整数,表示开始搜素下一个匹配项的字符位置,从0算起
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
multiline:布尔值,表示是否设置了m标志
source: 按照字面量形式而非传入构造函数中的字符串模式返回
实例方法:
RegExp对象的主要方法是exec(),该方法是专门为捕获组而设计的。
RegExp构造函数属性
模式属性
五、Function类型
每个函数都是Function类型的实例。函数是对象,因此函数名实际上也是一个指向函数的指针
函数定义方法:
(1)
function sum (num1,num2) {
return num1 + num2 ;
}
(2)
var sum = function(num1,num2) {
return num1 + num2 ;
};
(3)Function构造函数
var sum = new Function("num1","num2","return num1+num2");
没有重载
函数声明和函数表达式
浏览器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前使用;至于函数表达式,必须等到解析器执行到它所在的代码行,才真正被执行。
作为值的函数
因为ECMAScript中函数名本身就是变了,所以函数也可以作为值来使用
函数内部的属性
两个特殊的对象
(1):arguments 类数组对象,包含着传入函数中的所有参数
(2):this 指针,指向拥有这个auguments对象的函数
函数的属性和方法
两个基本属性:
(1)length 表示函数希望接受的命名参数的个数
(2)prototype 保存实例方法
两个非继承而来的方法:
(1)apply() 在特定的作用域中调用函数
接收两个参数:
在其中运行函数的作用域
参数数组
(2)call()
与apply()方法的作用相同,区别在于接受参数的方式不同
五、基本包装类型
因为有了基本包装类型,所以javascript中的基本类型值可以被当做对象访问。三种基本包类型分别是:Boolean、Number和String。以下是他们的共同特征:
(1)每个包装类型都映射到同名的基本类型
(2)在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作
(3)操作基本类型值得语句一经执行完毕,就会立即销毁新创建的包装对象。
六、Global对象和Math对象
在大多数EMCAScript实现中都不能直接访问Global对象;不过,web浏览器实现了承担该角色的window对象。全局变量和函数都是Global对象的属性。Math对象提供了很多属性和放啊,用于辅助完成复杂的数学计算。