写在前边的话,有个问题,作为程序猿,应把js学到什么程度?其实只要掌握两方面就好了,一个表单,一个ajax(其实就是要学好DOM),其它特效什么的不用管。若想弄特效,在网上下来改改即可。
1.js是基于对象和事件驱动,就是必须有事件来激活js。
html怎么调用js语句?若已知test()为js语句
①button调用
<input type="button" value="测试" οnclick="test();">
②href调用
<a href="javascript:void(0);" οnclick="test();" ></a>
其中javascript:void(0)表示伪协议,类似于http:写法,它表示点击超链接后不跳转,在这里不能写href="#",这样写实际上还是进行了跳转。
③一次调用多个js
<input type="button" οnclick="test1();test2();test3();">
2.js中string是基本数据类型(s为小写),用单引号或双引号都可修饰。而在java中String为引用类型。NaN(Not a Number)属于数值型,它是js里唯一一个不跟自己相等的值。
3.js中的数组长度可变,并且元素类型也可以不同.js有6中数据类型:
①undefined未定义,表示声明了变量但未赋值
②number,包括NaN
③null,空值
④string
⑤object,比如对象,数组等
⑥boolean
其中:
v_kao; //会提示你v_kao没定义
var v_kao; // 那么v_kao的值就是null;
4.object中的delete只能删除对象的属性,而删除不了对象
5.object类型的建立有两种方式:
①常规写法
var obj1 = new Object();//创建对象
obj1.name = "jerry";
obj1.age = 20;
obj1.id = "001";
②JSON写法
var obj2 = {name:"tom",age:20,id:"001"};
推荐第二种JSON写法
进行遍历操作时,可用for循环
for(var attr in obj2){
alert(typeof attr);//结果为String,attr为key
alert(attr + ":" + obj2[attr]);//obj2[attr]为key所对应的value,
//但不能写成obj2.attr,因为attr为String类型,这相当于写成
//obj2."name"这样的形式,所以错误
}
6.定义函数有三种方式
function test1(){
alert('第一种形式:function语句形式');
};
var test2 = function(){
alert("第二种形式,函数直接量形式,表达式");
};
说明:在js里,函数也是对象,这跟java不同,此时的函数叫做匿名对象,为特殊对象
var test3 = new Function("x","y","return x+y");
alert(test3(2,3));
//这是构造函数的形式,创建一个function类的实例对象
js里边的形参不用写类型,直接写参数即可。如:function(a,b){};
7.arguments对象是得到函数的实际参数,而与形参无关
arguments.callee表示引用当前正在执行的函数,或者说是调用。可以用来递归
arguments.callee的函数对象的引用,它给匿名函数提供了一种自我引用的方式。如:
var func = function() { alert(func === arguments.callee);}func();
//结果为true,就是说func与arguments.callee对象类型和值都相等。
方法类似于数组,但它不是数组,而是Object对象!
8.单独的脚本文件js中不需要添加<script>标记,因为这个是html标记。当需要引入外部js时,一定要分开写,不能嫌麻烦只写一行。如外部js为util.js,想引入时必须这么写:
<script src="util.js"></script>//分开两部分
<script>
function testFrm(){
//方法内容
}
</script>
错误的写法是:
<script src="util.js">
function testFrm(){
//方法内容
}
</script>
不能直接写,一定要分开,否则会不执行。
9.js为弱类型语言,意为它是根据赋值决定变量类型。所有的变量都用var表示
var i = 5;//为int类型
var name = "tom";//为string类型
js也分全局变量跟局部变量:
全局变量:①在方法外部声明的变量②在方法内部但没有加var关键字的变量
局部变量:方法内部使用var声明的变量
不过js不建议使用全局变量,一是安全性,二是效率问题
10.==,会自动转换数据类型
===,不会自动转换数据类型
function test2(){
var a = 3;
var b = "3";
if(a==b){
alert("a与b相等");
}else{
alert("a与b不相等");
}
}
结果为a与b相等
function test3(){
var a = 3;
var b = "3";
if(a===b){
alert("a与b相等");
}else{
alert("a与b不相等");
}
}
结果为a与b不相等
11.处理“”与‘’时应该错开用,不能两个“”或两个‘’同时使用。如:
<img src="1.jpg" οnclick="alert('OK');">
onload表示加载页面,一般应用在<body>之中,如:
<body οnlοad="javascript:alert('hello');">
onSubmit会在点击提交按钮,但没有提交成功时触发,这一般应用在表单的验证,如用户名输入不正确等
<form name="test" action="1.html" οnsubmit="return true">
12.js里的this表示当前“标签”的对象。如:
<img src="1.jpg" οnclick="JavaScript:alert(this.src)">//this表示img标签
<input type="text" name="ddd" value="adad" οnclick="JavaScript:check(this)">//this表示input标签
13.window.open表示打开一个新窗口,但已不常用window.open("1.html");window.opener方法 :返回父窗口的应用
14.settimeout是用于在指定的毫秒数后调用函数或计算表达式,setInterval是每隔一定时间就调用函数,方法或对象。
区别在于:setTimeout()方法是在等待指定时间后执行函数, 且只执行一次传入的函数. setInterval()方法是每指定间隔时间后执行一次传入的函数,循环执行直至关闭窗口或
clearInterval().例如:
<script>
function aa(a,b){
alert("---" + (a+b));
}
function testTimeout(){
var c = 2;
var d = 3;
setTimeout(aa(c,d),3000);
}
本意是在3秒后执行aa函数,但若写成上述形式,会立即执行,既使给aa(c,d)加上双引号[setTimeout("aa(c,d)",3000);]也不行,正确的写法应该是写一个匿名内部类,这是最万无一失的。
function testTimeout(){
var c = 2;
var d = 3;
setTimeout(function(){
aa(c,d),3000);
}
}
</script>
15.innerHTML是获取HTML当前标签的起始和结束里面的内容
toString()是把数组转换为字符串,并返回结果
toLocalString()是把数组转换为本地数组,并返回结果
这二者区别是: toLocalStrng()是Date类中的一个方法,而且该方法已经不再使用
16.this表示什么?
哪个对象调用了this所在的函数,this就表示哪个对象。
17.如何获取dom标签?
如在form表单中,有
<form name="frm">
姓名:<input name="uname" id="t">
</form>
则获取姓名时可以用
var name1 = document.getElementById("t");//通过id获取
var name2 = frm.uname.value;//通过name获取
//这两种方法等价,先获取表单名,再依次获取标签值