上一篇文章介绍了JavaScript脚本以及在HTML中引入JavaScript的方式,今天来说一说JavaScript中的变量、函数和类,JavaScript中的函数和类的关系不同于Java,大家可以额外关注一下。
1、变量
- 变量是内存中存储数据的最基本单元。
- java是一种强类型的编程语言(需要编译),变量的数据类型一旦确定不可改变;javascript是一种弱类型的编程语言(无需编译,直接解释执行),变量的数据类型可以随意改变。
- JS中的变量若只有声明而没有显式的赋值,系统默认赋值undefined(注意:不是’undefined’或”undefined”),undefined在JS中是一个具体的值,表示未定义;如果变量没有进行声明就去调用,程序会报错。
- 若变量在声明的时候,没有使用var关键字,那么这个变量无论定义在哪个位置上,它都是全局变量,如果在声明变量的时候没有使用var关键字,那么必须在声明的时候对变量进行赋值。
<script type="text/javascript">
var a = 100;
alert("a="+a);//正常输出
a = "abc";
alert("a="+a);//正常输出
a = true;
alert("a="+a);//正常输出
a = 3.5;
alert("a="+a);//正常输出
var ename;
if(ename==undefined){
//此时inner是全局变量
inner = "inner";
alert("ename==undefined");//执行
}else{
alert("ename!=undefined");
}
if(ename=='undefined'){
alert("ename=='undefined'");
}else{
alert("ename!='undefined'");//执行
}
alert("inner="+inner);//正常输出
alert(bala);//报错
</script>
2、函数
- 函数对应的关键字:function
- JS中的函数和Java中的方法相同
- 因为JS是一种弱类型的编程语言,所以JS函数不需要指定返回值类型,函数执行结束之后返回值可以是任意类型
- JS函数的语法格式
第一种方式:function 函数名(形参列表){ 函数体; }
第二种方式:函数名 = function(形参列表){ 函数体; } - JS中的函数没有重载机制,因此函数名不能重复
- JS函数必须手动调用才会执行
< script type="text/javascript">
//alert()方法会在HTML页面自上而下加载时,自动执行
alert("Hello World!");
function sayHello(){
alert("Hello World!");
}
//sayHello()函数不会像alert();那样自己执行,必须手动调用才能执行
sayHello();
</ script>
3、自定义类
- JS也是面向对象的编程语言,自定义的类默认继承的父类是Object
- JS中声明函数就表示定义了一个类,函数名就是类名,函数本身又是构造函数,函数的声明和类的定义混合完成
- 利用普通函数也可以创建对象,只不过这样的对象既没有属性也没有方法
<script type="text/javascript">
var ename = "SMITH";
function sayHello(){
alert("Hello:"+ename);
return "aaa";
}
var obj = new sayHello();
var returnValue = sayHello();
alert("obj="+obj);//obj=[object Object]
alert("returnValue="+returnValue);//returnValue=aaa
</script>
- 定义类的第一种方式,一般function关键字放在前边的写法用来定义函数
<script type="text/javascript">
//【定义类的第一种方式】
function User(id,name){
//属性(必须加this.)
this.id = id;
this.name=name;
//方法(必须加this.)
this.shopping = function(){
alert(this.name+" is shopping......");
}
//类中方法的错误写法1
//working = function(){
// alert(this.name+" is working......");
//}
//类中方法的错误写法2
//function working(){
// alert(this.name + " is working...");
//}
}
var user = new User();
user.shopping();
//user对象中的id属性、name属性默认值是undefined
alert("user.id="+user.id);//user.id=undefined
user = new User(16,"guoguo");
user.shopping();
alert("user.id="+user.id);//user.id=16
</script>
- 定义类的第二种方式,一般函数名(类名)放在前边的写法用来定义类
<script type="text/javascript">
//【定义类的第二种方式】
Employee = function(id,name){
//属性(必须加this.)
this.id = id;
this.name=name;
//方法(必须加this.)
this.working = function(){
alert(this.name+" is working......");
}
}
var employee = new Employee(6,"guoguo");
employee.working();
alert("id="+employee.id+",name="+employee.name);
//Object中有prototype属性,所以子类Employee才能使用prototype
//动态扩展Employee类中的方法
Employee.prototype.signIn = function(){
alert(this.name + " has sign in......");
}
//必须先定义扩展方法,然后才能调用扩展方法
employee.signIn();
</script>