JavaScript学习笔记
(以下观看学习视频时,整理的笔记)
一.JS入门
<script type="text/javascript">
alert(new Date().toLocaleDateString());
</script>
1.JavaScript代码放在<script>标签中,script可以放到<head>、<body>等任意位置,而且可以有不止一个<script>标签。alert函数是弹出消息窗口,new Date()是创建一个Date类的对象(默认值是当前时间)
2.放在<head>中的<script>在body加载之前就已经运行
3.除了可以再页面中声明JavaScript以外,还可以将JavaScript写到单独的JS文件中,然后在页面中引入:<script src=”test.js” type=”text/javascript”></script>。声明到单独的JS文件的好处是多页面也可以共享、减少网络流量。
4.<scriptlanguage=”…”>已经不推荐使用。
5.在超链接的点击里执行JavaScript:<a href=”javascript:alert(88)”>发发</a>
6.JavaScript中也有事件的概念,当按钮被点击的时候也可以执行Javascript:
<inputtype=”button” οnclick=”alert(99)” value=”久久”/>
只有超链接的href中的JavaScript中才需要加”javascript:”,因为它不是事件,而是把”javascript:”看成像”http:”、”ftp:”、”thunder://”、”ed2k://”、”mailto”一样的网络协议,交由JS解析引擎处理。只有href中,这是一个特例。
二.JS的变量
1.JavaScript中即可以使用双引号声明字符串,也可以使用单引号声明字符串,主要是为了方便和html集成,避免转义符的麻烦
2.JavaScript中有null、undefined两种,null表示变量的值为空,undefined则表示变量还没有指向任何的对象,未初始化
3.JavaScript是弱类型,声明变量的时候无法:int i=0;只能通过var i=0;声明变量,和C#中的var不一样,不是C#中那样的类型推断
4.JavaScript中也可以不用var声明变量,直接用,这样的变量是”全局变量”,因此除非确实想用全局变量,否则使用的时候最好加上var
5.JS是动态类型的,因此var i=0”; i=”abc”;是合法的
判断变量初始化
JavaScript中判断变量、参数是否初始化的三种方法(推荐最后一种):
a. var x;
if(x==null){
alert(“null”);
}
b. if(typeof(x)==”undefined”){
alert(‘undefined’);
}
c. if(!x){alert(‘不x’)}
if(x){}//变量被初始化了或者变量不为空或者变量不为0
三.JS出错与调试
1.如果JavaScript中的代码有语法错误,浏览器会弹出报错信息,查看报错信息就能帮助排查错误
2.JavaScript的调试,使用VS可以很方便的进行JavaScript的调试,调试时需要啊注意几点:
a.IE的调试选项要打开,Internet选项→高级,去掉“禁用脚本调试”前的勾选;b.以调试方式运行网页;
c.设置断点、监视变量等操作和C#一样(断点设置好,F5之后,右击要查看的变量,选择”加入监看式”,按F10逐步执行)
四.函数的声明
1.JavaScript中声明函数的方式:
function add(i1,i2){
Returni1+i2;
}
2.不需要声明返回值类型、参数类型。函数定义以function开头
Var r=add(1,2);
Alert(r);
r=add(“你好”,”tom”)
alert(r);
3.JavaScript中不想C#中那样要求所有路径都有返回值
匿名函数:
Var f1=function(i1,i2){
return i1+i2;
}
Alert(function(1,2));
1. 类似于C#中的匿名函数
2. 这种匿名函数的用法在JQuery用的非常多
五.JS面向对象基础(重要)
1.JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的,下面讲解的时候还是用C#中的类、构造函数的概念,JavaScript中的String、Date等”类”都被叫做”对象”,挺怪,方便初学者理解,不严谨。JavaScript中声明类(类不是类,是对象):
function Person(name,age){
this.name=name;
this.age=age;
this.SayHello=function(){
alert(“你好,我是”+this.name+”,我”+this.age+”岁了”);
}
}
var p1=new Person(“tom”,20);
p1.SayHello();
必须要声明类名,function Person(name,age)可以看做是声明构造函数,Name、Age这些属性也是使用者动态添加了
六.Array对象
1.JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体;
var names=new Array();
names[0]=”tom”;
names[1]=”jerry”;
names[2]=”john”;
for(var i=0;i<names.length;i++){
alert(names[i]);
}
3. 无需预先制定大小
七.JS中的Dictionary
1.JS中的Array是一个宝贝,不仅是一个数组,还是一个Dictionary,还是一个Stack
var pinyins=new Array();
pinyins[“人”]=”ren”;
pinyins[“口”]=”kou”;
pinyins[“手”]=”shou”;
alert(pinyins[“人”]);
alert(pinyins.人);
像Hashtable、Dictionary那样用,而且像它们一样效率高
八.Array的简化声明
1.Array还可以有简化的创建方式:
var arr=[3,5,6,8,9]普通数组初始化
这种数组可以看做是pinyins[“人”] =”ren”;的特例,也就是key为0、1、2…..
2.字典风格的简化创建方式:
var arr={“tom”:30,”jim”:20};
九.数组、for及其他
1.对于数字风格的Array来说,可以使用join方法拼接为字符串
var arr={“tom”,”michel”,”john”};
alert(arr.join(“,”)); //JS中join是array的方法,不想.NET中是string的方法,for循环可以像C#中的foreach一样用
2.for循环还可以获得一个对象所有的成员
for(var e in document){
alert(e);
}
数组的创建:
1.var arr=new array();
2.var arr=[‘a’,’b’,’c’,’d’];
3.var arr=new array(‘a’,’b’,’c’,’d’)
4. var arr=new array(10);