JavaScript总结(第 三、四、五、六、七章)

第三章总结(数据类型)

一、语法

1.ECMAScript中一切(变量名、函数名、操作符都区分大小写)
2.标识符:

  • 第一个字符必须是 字母 或 _ 或 $
  • 其他字符可以是字母、下划线、美元符号、数字

3.注释:
// 单行注释
/* 多行注释 */
4.语句后最好加上分号
5.语句块用 { } ,单条语句最好也用 { }

二、关键字和保留字

1.关键字和保留字最好不要作为标识符和属性名。

三、变量

1.ECMAscript的变量类型是松散类型,它可以保存任意类型的数据;它保存的数据也可以进行二次更变即使保存的数据类型发生了改变(但我们并不推荐改变保存数据的数据类型)
2.定义变量用 var 变量名 = 数据;
注:

  • 如果不对变量名进行初始化,变量会保存undefined;
  • 如果使用var定义变量,定义的是局部变量;如果省略var,则定义了一个全局变量。(不推荐定义全局变量,严格模式会有错误)。如果在函数中定义了一个全局变量,需要在调用了一次该函数后,该全局变量才会有定义。
  • 同时定义多个变量:
var messsage = "hi",
	found = false,	/*逗号分离*/
	age = 29;	/*分号结束*/
  • 严格模式下不能将变量名命名为eval、arguments.
四、数据类型

1.typeof操作符(查看变量的数据类型)
(1)书写格式: typeof 变量名/要检测的数据;

  • typeof是操作符不是函数,因此变量名左右不需要带圆括号。
  • 当变量名未进行定义或初始化时使用typeof操作符都显示undefined;
    2.undefined类型
    (1) 值:undefined
    注:
  • 可以在定义变量时将其初始化为undefined。
  • 对于未声明的变量只能使用typeof操作符,其他操作都会有错。
    3.Null类型
    (1)值:null (表示一个空对象指针)
    在使用typeof操作符会返回object。
    注:
  • 如果定义的变量想在将来用来保存对象,最好在定义该变量的时候初始化为null,这样有利于后续操作。
if(car!=null){
...
}
  • 由于undefined派生于null,因此在测试undefined与null是否相等时,要返回true
alert(null == undefined); /*true*/

4.Boolean类型
(1)值:true、false
true和false与数值不同,因此true不一定等于1,false不一定等于0,。
(2)转型函数: Boolean(变量名);
使用该函数任何数据都会转化为true、false。
(3)对于理解控制流语句(如if语句)会自动执行Boolean转换

var message = "hi";
if(message){
	alert("value is true");  
}
/*value is true*/

5.Number类型
(1)表示整数数值和浮点数值

  • 整数数值:
    十进制: var num = 23;
    八进制: var num = 070; //第一位必须为0,如果数字超过范围会当做十进制处理
    十六进制: var num = 0xAf; //前两位必须是0x,后面的字母大小写都可以
  • 浮点数值:
    数值中必须有小数点,小数点后必须有一位数字,小数点前可以没有数字(但不推荐);
    对于极大或极小的值,可以用e表示法表示数值
    (2)数值范围
    正无穷:Infinity
    负无穷:-Infinity
    最大值:Number.MAX_VALUE
    最小值:Number.MIN_VALUE
  • 判断一个数值是不是位于最大值和最小值之间:
    isFinite(变量名),如果在最大值最小值之间,返回true。
    (3)NAN (非数值Not a Number)
    任何数值除以非数值会返回NAN
  • 任何涉及NAN的操作都会返回NAN
  • NAN与任何数值都不相等,包括NAN本身
  • 判断一个数据是不是数值:isNAN(数据);
    如果该数据可以转化为数值,返回false
    如果不能转化为数值,返回true
    (4)数值转换(把非数值转化为数值)
    Number()、parseInt()、parseFloat()
    6.String类型
    (1)字符串可用双引号(")或单引号(’)表示。
    字符串的长度可通过length属性获得:变量名.length;
    (2)特点
  • 字符串不可变,只能先销毁原来的字符串、再用另一个新的字符串填充该变量。
var lang = "JAVA";
lang = lang + "Script";

(3)其他数据转化为字符串
toString()、String()
7.Object类型

var o = new Object();/*可以省略圆括号,但不推荐*/
五、操作符

1.一元操作符
(1)递增递减操作符
a++ 、 a-- 、 ++a 、 --a
这四个操作符对字符串、布尔值、浮点数值和对象都有作用。
(2)一元加和减操作符

  • 一元加操作符:s1= +s2; //会将s2转换为数值、赋值给s1
  • 一元检测操作符:s1= -s2; //会将s2转换为数值、再添一个负号.
    2.位操作符
    (1)非(NOT)
    用 ~ 表示
    (2)与(AND)
    用 & 表示
    (3)或(OR)
    用 | 表示
    (4)异或(XOR)
    用 ^ 表示,只在真值表为1 0、0 1时返回 1
    (5)左移
    用 << 表示
    (6)有符号右移
    用 >> 表示
    (7)无符号右移
    用 >>> 表示
    3.布尔操作符
    (1)逻辑非 ( ! )
    (2)逻辑与 (&&)
    (3)逻辑或 ( || )
    4.乘性操作符
    操作符在非数值的情况下会自动执行类型转换
    (1)乘法(*)
    (2)除法 (/)
    (3)求模(%)
    5.加性操作符
    (1)加法(2)减法
    6.关系操作符
    (1)小于< (2)大于> (3)大于等于>= (4)小于等于<=
    7.相等操作符
    (1)相等(= =)和不相等(!=)
    先进行转化,转化后再看等不等于
    (2)全等和不全等
    全等 (= = =)
    两个操作数未经转换直接比较,相等返回true,否则返回false.
    8.条件操作符
    s1 = (num1>num2)?num1:num2;
    9.赋值操作符
    var s1 = 22;
    10.逗号操作符
    逗号操作符总返回表达式的最后一项。
    var num = (5,1,4,8,0); //num值为0.
六、语句

1.if语句
2.do-whie语句
3.while语句
4.for语句
5.break、continue语句
6.switch语句
switch比较时用的是全等操作符,不会自动进行类型转换。
(上面六个和c语言一样)

7.for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象。
当迭代的对象变量是null或undefined时,会停止循环循环体。因此为保证兼容性,在使用for-in语句之前要保证该对象的值不是null或undefined.

for (var propName in window) {	/*var保证使用了局部变量*/
             document.write(propName);
             document.write("<br />");
        }

8.label语句
标签名:statement
label语句通常与for语句配合使用。

var num = 0;
        outermost:
        for (var i=0; i < 10; i++) {
             for (var j=0; j < 10; j++) {
                if (i == 5 && j == 5) {
                    break outermost;	//直接退出最外层循环
                }
                num++;
            }
        }
        alert(num);    //55
var num = 0;
        outermost:
        for (var i=0; i < 10; i++) {
             for (var j=0; j < 10; j++) {
                if (i == 5 && j == 5) {
                    continue outermost;
                }
                num++;
            }
        }
        alert(num);    //95

9、with语句
将代码的作用于设置到一个特定的对象中。严格模式下不允许使用with语句。

七、函数

函数使用function来声明。
注:

  • return可以不带返回值,即 return;这种情况函数会在停止循环后返回undefined。一般用于需要提前停止函数又不需要有返回值的情况。(推荐让函数始终都有返回值)
    1.即便定义函数是只让接受两个参数,但你也可以接受一个、三个甚至更多。
<script type="text/javascript">
        function aa(a,b){
        	alert(a);				//输出1
        	alert(arguments[2]);	//输出3
        }
        aa(1,2,3);	
    </script>
  • 可以用length属性获得有多少个参数传递给了函数
function howManyArgs() {
            alert(arguments.length);
        }
        
        howManyArgs("string", 45);    //2
        howManyArgs();                //0
        howManyArgs(12);              //1
  • 没有传地址的命名参数自动被赋予undefined.
  • arguments的值与命名参数保持一致,不论改变哪个,另一个都随之改变,但在严格模式下,对arguments赋值,命名参数不改变
    2.没有重载
    如果定义了两个同名的函数、那么这个名字只属于后定义的函数

第四章总结 (变量、作用域、内存)

一、执行环境和作用域

1.活动最开始质包含一个变量-- arguments对象
2. 内部环境可以通过作用域链依次访问左右外部环境,但是外部环境不能访问内部环境中的任何变量 。(比如内部又有一个函数的话,就不能访问内部环境里的变量了)
3. JS没有块级作用域在if或者for语句中定义的变量,出了if和for语句仍然可以访问。如果是在函数当中,那么该变量只会添加在当前环境中(即该函数内部),出了该函数不可以引用。
4. 检测该变量是什么基本类型用 typeof 变量
判断该变量是不是某一种引用类型用 变量 instanceof 引用类型

第五章总结 (引用类型)

一、Object类型

1.定义格式

var o = new Object();
o.name = "123abc";
o.age = 12;
       
var o = {
       		name:"123abc",
       		age:12
       };

2.访问属性
(1)对象 . 属性
(2)对象[ "属性 "] (属性名字中有空格时必须用第二种方法)

二、Array类型

1.创建数组
(1)通过Array构造函数

var colors = new Array(3);      //创建包含三个元素的数组
var names = new Array("Greg");	//创建包含“Grey”一个元素的数组

(2)通过数组字面表示法

var colors = ["red", "blue", "green"]; //创建包含三个元素的数组
var names = [];                   //创建一个空数组
var values = [1,2,];
//别这么写,可能包含两个元素也可能包含三个元素

2.属性
(1)数组长度:==数组名 . length ==
(2)改变元素之间的分隔符:数组名 . join(“ || ”);
// red || green || blue

3.栈方法(后进后出)

(1)push ( ) 方法: 数组名 . push(“red”,“black”);
把元素一次加在数组末尾
(2)pop ( ) 方法: 数组名 . pop();
移除末尾最后一项

4.队列方法(先进先出)

(1)shift ( )方法:数组名 . shift();
移除数组第一项,并返回第一项
(2)unshift()方法:数组名 . unshift(“red”,“green”);
在数组首部添加元素

5.重排序

(1)把数组元素翻转:数组名 . reserve();
(2)升序排序:数组名 . sort(); (先把数组元素用toString方法转换成字符,再进行比较)
6.方法:
(1)var 变量名 = 数组名 . splice(1);
splice返回值为一个数组,新数组存的是原数组从第一位开始的元素
(2)var 变量名 = 数组名 . splice(1,4);
新数组存的是原数组从第一位开始到第四位(不包含第四位)的元素
(3)数组名 . indexof(元素名称);
找该元素名称在数组中的位置,indexof从前往后找;lastIndexof从后往前找,角标都一样

三、Date类型

1.创建一个日期和对象
var now = new Date();
2.方法:
Date.UTC();
Date.parse();

四、RegExp类型

ECMAScript通过该类型来支持正则表达式。
1.匹配模式
g : 全局模式,即该模式会被应用到所有字符串
i : 不区分大小写模式,在匹配项时忽略大小写
m : 多行模式,到该行行末时会继续下一行查找

五、Function类型

1.创建函数

//第一种
function 函数名(参数列表){
			语句;
       }
       
//第二种
var sum=function(参数列表){
       		语句;
       };
       
//第三种,不推荐
 var sum = new function("参数列表","返回值");

2.没有重载(相同的函数名,第二个会覆盖第一个)
3.直接用function声明函数,及时在声明前调用该函数也不会有错误;如果是用函数表达式,则必须在该表达式后再调用,否则会有错误。
4.函数内部有两个特殊的对象arguments 、 this
(1)arguments . callee指向拥有这个arguments对象的函数;arguments主要是保存函数参数;
如果一个函数内部又调用了当前函数,把内部调用的函数换成arguments.callee,那么如果这个函数的内容进行了改变,保存了原函数的变量仍然能够起到原函数的作用,后面的函数作用才会发生改变。
(2)this引用的是函数的执行对象。
6.一些方法和引用
(1).caller:指向调用当前函数的函数。
(2)length:返回当前函数形参的个数
7.基本包装类型(特殊的引用类型)
有Boolean、Number、String
(1)Boolean类型
建议不要用引用类型的Boolean对象
var booleanObject=new Boolean(false);
(2)Number类型
var numberObject=new Number(10);
可以使用toString()方法、toLocalString()方法、Valueof()方法、
toFixed(数字):可以保证数字后面的小数点位数
toExponential(数字):把数值进行e指数表示法,数字表示e 前面数字的小数点位数
toPrecision(数字):自动选择更合适的表示方法(小数点或者指数形式),数字表示所有位数
(3)String类型
var stringObject= new String('hello");
string 具有.length属性,返回字符串长度;
字符方法
==charAt( 数字 ) ==:返回盖好数字所在位置的字符
carCodeAt(数字):返回该位置所在字符的ASCLL码
源字符串 . cancat(“字符串”):在源字符串末尾加新的字符串
原字符串 . slice(数字):从数字位置开始返回字符,如果是负数则加上字符串长度,开始返回
原字符串 . substring(数字):从数字位置开始返回字符,如果是负数则从0开始返回
原字符串 . substr(数字1,数字2):从数字位置开始返回字符,返回长度为 数字2 的字符串
reim(),删除前置和后置所有空格
toLowerCase(),toLocalLowerCase(),toUpperCase(),toLocalUpperCase():转换大小写字母
==原字符串 . localCompare(“要对比的字符串”):返回-1,0,1

六、单置内体对象

1.Global对象
(1)方法:
encodeURI(网址):不会对本身属于URI的特殊字符进行编码
encodeURICpomponent():会对本身属于URI的特殊字符进行编码
(2)eval():在eval中创建的任何变量或函数都不会被提升,因为在解析代码的时候它们被包含在每一个字符中。他们只在eval()执行时创建。
2.Math对象
min(数字1,数字2,…):返回最小的一位
max(数字1,数字2,…):返回最大的一位
apply(Math,values):找数组的最大或最小,Math.max.apply(Math,数组名);
random()返回随机数

第六章总结 (面向对象程序设计)

ECMAScript将对象定义为无序属性的集合,其属性可以包含基本值、对象或者函数。每个对象都是基于一个引用类型创建的,这个引用类型可以是第五章(引用类型那章)讨论的原生类型也可以是开发人员定义的类型。

一、理解对象

1.属性类型:
(1)数据属性:包含一个数据值得位置,该位置可以读取和写入值。
Configurable:能否通过delete删除属性从而重新定义属性 。
Enumerable:能否通过for-in循环返回属性
Writable:能否修改属性值
Value:包含这个属性 的数据值,读取或写入时都从这开始进行
(2)访问器 属性:
Configurable:能否通过delete删除属性从而重新定义属性 。
Enumerable:能否通过for-in循环返回属性
Get:在读取数据时调用的函数
Set:在写入函数时调用的函数

  • 包含getter和setter函数。
    getter:在读取访问器属性时,该函数负责返回有效的值
    setter:在写入访问器属性时,该函数负责如何处理数据

二、创建对象

1.工程模式:使用简单函数创造对象、对对象添加属性和方法,然后返回对象
2.构造函数模式:通过创造自定义引用类型,可以像创建内置对象实例一样使用new操作符。
任何函数只要通过new操作符调用,就可以作为构造函数
comstructor用来标识对象类型
3.原型模式:使用prototype属性指定那些应该共享的属性和方法。
一旦创建了一个新函数就会有prototype属性,这个属性指向函数的原型对象。constructor指向prototype属性所在的指针。
可以通过isPrototypeOf()来判断是否有这样的关系爱存在
**hasOwnPropert()**来看某个属性是存在在实例中还是原型中。

三、继承

实例(指向)->原型对象(指向)->构造函数(包含)->原型对象
1.原型式继承
可以在不必预先构造函数的情况下实现继承
2.寄生式继承
基于某个对象或某些信息创建一个对象,然后增强对象最后返回对象。
3.寄生组合式继承
是基于类型继承的最有效方式。

第七章总结(函数表达式)

函数声明提升:在执行代码之前会先进行读取函数声明,这意味着函数声明可以在调用语句的后面。

一、闭包

定义了函数要调用才会执行啊!
1.函数的闭包:如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包。
2.如何创建闭包:
常见方式:在一个 函数内部 创建另一个函数。
例:

function createComparsionFunction(propertyName){
			return function(object1,object2){
			
			//下面这两行代码虽然在函数内部,
			但是可以调用该函数外部的变量,即porpertyName
			
	//之所以能访问是因为内部函数的作用域链包含了createComparsionFunction的作用域
			
				var value1=object[propertyName];
				var value2=object[propertyName];
				
				if(value1<value2){
					return -1;
				}
				else if(value1>value2){
					return 1;
				}
				else{
					return 0;
				}
			};
		}

3.为什么要有闭包
由于作用域,我们无法在函数外访问函数里的变量,但我们有时又会需要使用,这时就可以用到闭包。
4.闭包的作用:
(1)可以读取整个父级作用域函数内部的变量。
(2)让这些变量的值始终保持在内存中。
(3)避免使用过多的全局变量,从而使得全局变量污染。
注意:
(1)闭包会携带包含它的函数的作用域,因此会比其他函数更占内存,过多使用闭包会使占用内存过大,从而在IE中可能导致内存泄露。因此在使用闭包后最好将当前不需使用的变量删除,如将这些值设为null,从而解除引用。
(2)闭包只能取得闭包函数中任何变量的最后一个值,前面的会与后面的值保持一致。

二、模仿块级作用域

Js没有会计作用域的概念。比如变量i是在某函数的if语句中定义的,那么在该函数中随处都可以调用。

//函数要带()转化为函数表达式
(function(){
	//这里是块级作用域
})();

三、私有变量

JS中没有私有变量的概念,不过所有在函数内部定义的变量都可以当做私有变量。
特权方法:有权访问私有变量和私有函数的公有方法。比如使用this来访问属性。
闭包可以使用构造函数模式、原型模式来实现自定义特权的方法,也可以使用模块模式、增强的模块模式来实现单例的特权方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值