定义在函数外的变量一定是全局变量;定义在函数内的变量,如果声明了var,那该变量就是局部变量,如果不声明var,那么该变量就是全局变量。
1、全局变量与局部变量
2、两种类型的Cookie
i)持久性cookie,会被存储到客户端的硬盘上。
ii)回话cookie:不会被存储到客户端的硬盘上,而是放在浏览器进程所处的内存当中,当浏览器关闭时则该回话cookie就销毁了。
3、在JavaScript中,函数(function)就是对象
4、在JavaScript中,没有方法(函数)重载的概念
5、Function对象
在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。Function对象接受的所有参数都是字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接受的参数。
6、隐含的对象arguments
在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。arguments.length就表示实际传递的参数的个数。
7、函数名.length
每一个函数对象都有一个length属性,表示该函数期望接受的参数个数。它与函数的arguments不同。arguments.length表示函数实际接受的参数个数。
8、JavaScript中有五种原始数据类型
Undefined、Null、Boolean、Number以及String。(注意:在JavaScript中,没有char数据类型)
Undefined数据类型的值只有一个:undefined;
Null数据类型的值只有一个:null;
Boolean数据类型的值有两个:true和false;
9、typeof运算符
typeof是一元运算符,后跟变量的名称,用于获取变量的数据类型,其返回值有5个:undefined、boolean、number、string以及object。
10、在JavaScript中,如果函数没有声明返回值,那么会返回undefined11、null与undefined的关系
undefined实际上是从null派生出来的。例如:
null与undefined的关系
JavaScript
11、强制类型转换
在JavaScript中有3种强制类型转换:Boolean(value),Number(value),String(value)。
12、Object对象
在JavaScript中,所有对象都是从Object对象继承过来的。
Object对象
JavaScript
上面的代码中,浏览器并没有打印出什么,并不能说明Object对象不带有任何属性。下面代码测试Object对象中的属性是否可以枚举,如果返回false,则说明Object对象中的属性是不能枚举的。
Object对象中的属性是不能枚举的
JavaScript
浏览器弹出false对话框,则说明Object对象中的属性是不能枚举的。
接下来我们再看看window对象中的属性是否可以枚举的
window对象中的属性是可以枚举的
JavaScript
在Chrome浏览器中我们会看到浏览器调试控制台中打印出一大堆属性,说明window对象中的属性是可以枚举的。
13、在JavaScript中,可以动态添加对象的属性,也可以动态删除对象的属性
动态添加/删除对象的属性
JavaScript
alert(object.username);//zhangsan
object["password"] = "123";
alert(object.password);//123
delete object.username;//此时,username属性已经被删除
alert(object.username);
14、JavaScript中定义对象最常见的方式
定义对象最常见的方式
JavaScript
15、数组
数组定义
JavaScript
//方法二(推荐)
var array = [1,25,4];
array.sort();
alert(array);
调用数组的sort()方法,浏览器打印1,25,4,这并不是我们期望的结果。
对于JavaScript数组的sort方法来说,它会先将待排序的内容转换为字符串(调用toString()方法),按照字符串的先后顺序进行排序。
下列方式可以得到我们期望的结果(按数组大小进行排序):
数组排序
JavaScript
array.sort(compare);
alert(array);
我们再用匿名函数的方式实现:
匿名函数排序
JavaScript
var temp1 = parseInt(num1);
var temp2 = parseInt(num2);
if (temp1 < temp2) {
return -1;
} else if(temp1 == temp2) {
return 0;
} else {
return 1;
}
});
alert(array);
16、JavaScript中定义对象的5种方式(JavaScript中没有类的概念,只有对象)i)基于已有对象扩充其属性和方法
基于已有对象扩充其属性和方法
JavaScript
最简单的一种方式,使用起来并不方便,适合于临时需要一个对象。
ii)工厂方式创建对象
不带参数的工厂方法:
JavaScript
var object1 = createObject();//调用createObject工厂方法创建对象object1
var object2 = createObject();//调用createObject工厂方法创建对象object2
object1.get();//调用对象get方法
object2.get();//调用对象get方法
带参数的工厂方法:
JavaScript
var object2 = createObject("lisi","456");
object1.get();
object2.get();
方法缺点:
每创建一个对象,内存中就创建一个get方法,比较浪费内存,且影响性能。而我们的期望是,创建两个不同的对象,它们的属性是不一样的,但方法是共用的。所以接下来我们需要改进createObject工厂方法。
改进的工厂方法:
JavaScript
var object = new Object();
object.name = name;
object.password = password;
object.get = get;
return object;
}
var object1 = createObject("zhangsan","456");
object1.get();
object2.get();
将get方法定义在createObject函数外面,这样每创建一个对象,get方法都是共用的。让一个函数对象被多个对象所共享,而不是每一个对象都拥有一个函数对象。
iii)构造函数方式创建对象
不带参数的构造函数:
JavaScript
<div class="jb51code">
<pre class="brush:js;">
function Person(){
//在执行第一行代码前,js引擎会为我们生成一个对象
this.name = "zhangsan";
this.password = "123";
this.getInfo = function() {
alert(this.name+","+this.password);
};
//此处有一个隐含的return语句,用于将之前生成的对象返回(也是跟工厂方式不一样的地方)
}
var p1 = new Person();
p1.getInfo();