`

javascript学习笔记

阅读更多
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表单标签</title>
</head>
<body>
<form action="./FormTest" method="post">
<input type="text" value="noName" tabindex="5" maxlength="2" /><br/>
<input type="text" name="name" value="mygu" tabindex="4" /><br/>
<input type="text" name="name" value="hwzhang" tabindex="3" /><br/>
<input type="text" name="disabled" disabled="disabled" value="hwzhang" tabindex="2" /><br/>
<input type="radio" name="isFlag" value="0">
<input type="radio" name="isFlag" value="1"><br/>
<input type="checkbox" name="isCheck" value="1">
<input type="checkbox" name="isCheck" value="1">
<input type="checkbox" name="isCheck" value="1">
<input type="checkbox" name="isCheck" value="1">
<input type="image" src="" alt="look is good"><br/>
<label>label关联表单控件:<input type="text"/></label><br/>
<select name="select" onchange="" multiple="multiple" size="7">
<optgroup label="第一组">
<option>1</option>
<option>2</option>
<option>3</option>
</optgroup>
<optgroup label="第二组">
<option>4</option>
<option>5</option>
<option>6</option>
</optgroup>
</select><br/>
<textarea rows="10" cols="10"></textarea><br/>
<a href="javascript:alert('welcome');">hwzhang</a><br/>
<input type="submit" value="submit" tabindex="1" />
</form>
</body>
</html>
<!-- form表单提交时,该表单中的表单控件将转换成请求参数,相应规则如下:
1、每个有name属性的表单控件对应一个请求参数,没有name属性的表单控件不会生成请求参数。
2、如果多个表单控件name属性相同,则多个表单控件只生成一个请求参数,只是该参数有多个值。
String name = request.getParameter("name");只能得到第一个该参数的值
Map<String,Object[]> valueMap = request.getParameterMap();//一个请求参数对应多个值,也就是一个key对应一个数组集合
System.out.println("valueMap : "+valueMap.get("name")[0]);
System.out.println("valueMap : "+valueMap.get("name")[1]);
for (; arr.hasMoreElements();){
System.out.println(arr.nextElement());//所有请求参数的name属性值
}
3、表单控件的name属性指定请求参数的参数名,value指定请求参数值。
4、如果某个表单控件设置了disabled="disabled"属性,则该表单控件不再生成请求参数。
5、tabindex="1",按tab键时焦点转移到下一个控件上
6、对于单选框(radio)、复选框(checkbox)而言,只有被勾选后才会生成对应的请求参数。
7、<input type="image">与submit相似。区别是图像域是一个图像按钮。
8、<label for="id"></label>标签和表单控件可以关联。单击<label>标签时与之关联的表单控件获取焦点。
关联方式:
1、隐式使用for属性。<label for="被关联表单控件ID属性值"></label>
2、显示关联。<label>label关联表单控件:<input type="text"/></label>
注意:少用显示关联,可能存在兼容性。
9、列表框和下拉菜单:<select multiple="multiple" size="3">当select标签指定multiple="multiple"或size="3"之一时就会变成列表框。multiple="multiple"可以支持选中多个
10、<textarea>标签中rows、cols属性必填。不能指定value属性值。
-->
<!--
javascript脚本
1、javascript脚本运行方式:
1、使用javascript:前缀构建执行javascript代码中的URL。例如javascript:alert("hwzhang");
2、使用<script.../>标签来包含javascript代码。
2、javascript变量的定义:
1、隐式定义:直接给变量赋值的方式。
2、显示定义:使用var先声明再使用。javascript是弱类型语言。javascript变量区分大小写
3、类型转换:
对于减号运算符,因为字符串不支持减法运算,所以系统自动将字符串转换成数值
对于加号运算符,因为字符串可以用加号作为连接运算符,所以系统自动将数值转化成字符串进行连接运算
javascript通过toString()将布尔值、数值等转换成字符串;
通过parseInt()将布尔值、字符串转换成整数;
通过parseFloat()将字符串、布尔值转换成浮点数;
parseInt、parseFloat转换时字符串包含字符是转换成NaN;转换undefined、null、布尔值和其他对象时一律转换成NaN
4、javascript局部变量覆盖全局变量;javascript没有块作用域;javascript的局部变量在整个函数作用域有效,与在函数中定义的位置无关
5、javascript基本数据类型:
1、数值类型:包含整数和浮点数;注:数值的直接量不要以0开始(javascript支持8和16进制)。
数值超出表示范围将出现的两个值:Infinity(无穷大)和-Infinity(负无穷小);Infinity和-Infinity进行算术运算是表达式值为:NaN
javascript运行除数为0;0除以0结果为NaN;正数除以0为Infinity;负数除以0结果为-Infinity
NaN:No a Number;NaN不会与任何数值变量相等,javascript专门用isNaN()函数来判断某个变量是否为NaN
判断两个浮点型变量是否相等:可以计算这两个浮点型数的差值是否小于一个足够小的数即可。
2、布尔类型:只有true和false两种值
3、字符串类型:字符串变量必须以引号或者单引号括起来
match和search都支持使用正则表达式作为子串。区别:match返回值为字符串数组或null,match在正则表达式后加g表示全局匹配,不加g返回第一次结果;search方法返回子串的索引,否则返回-1;
4、undefined:专门用来确定一个已经创建但是没有初值的变量
undefined该值表示某个变量不存在、没有赋值或某个对象的属性不存在。如需严格区分undefined和null需使用精确等于符(===)。
5、null:用于表明某个变量的值为空。
6、正则表达式:javascript的正则表达式必须放在两条斜线之间,如/abd/;/d匹配数字,digit数字,/s匹配空格,space空间;/w匹配单词,包括0~9、26个字母和下划线(_),word单词
$:匹配一行的结尾,^:匹配一行的开头;?:0次或1次;*:0次或多次;+:1次或多次;{m,n}:最少m次,最多n次
用()可以将一个表达式形成一个固定组。还可以在()内使用竖线(|)表示互斥。例如:/((abc)|(def))/可匹配bac或def。
javascript的正则表达式提供了一个test()方法,用于判断表达式是否匹配某个字符串。replace()方法也可以使用正则表达式。
String.prototype.trim = function(){//该方法为非静态方法,属于实例对象
return this.replace("/(^\s*)|($\s*)/g","");
}
7、复合类型是由多个基本数据类型组成的数据体。javascript中的复合类型大致有三种:Object对象;Array数组;Function函数。
对象是一系列命名变量和函数的集合。
数组是一系列的变量。数组定义方式:var a = [1,2,3];var b = []; var c = new Array();
javascript数组的特征:
1、数组长度可变;
2、同一个数组里数组元素的类型可以互不相同;
3、访问数组元素时不会产生数组越界,访问并未赋值的数组元素时,该元素的值为undefined;
函数是javascript中另一种复合类型。
javascript函数的特征:
1、javascript函数无须声明返回值类型。
2、javascript函数无须声明参数类型。
3、javascript函数可以独立存在,不必依附于类。
4、javascript必须使用function关键字调用。
8、运算符:
1、逗号(,)运算符允许将许多表达式排在一起,最后返回最右边表达式的值。例:a=(b=5,c=7,d=56);
2、void运算符用于强行指定表达式不返回值。例:a=void(b=5,c=7,d=56);
3、typeof和instanceof运算符
typeof运算符用于判断某个变量的数据类型,可作为函数来用,例如:typeof(a)可返回变量a的类型;可以作为运算符来使用,例如:typeof a,也可返回变量a的数据类型。
if(typeof name == 'string')
不同类型使用typeof返回值:undefined值:undefined;null值:object;布尔值:boolean,数字值:number;字符串值:string;对象:object;函数:function
与typeof类似instanceof判断某个变量是否为指定类的实例,如果是,则返回true,否则返回false,当该变量为null是返回false
var num = new Number();
alert("num : "+num);
//num = null;
alert(num instanceof Number);
9、异常处理:javascript异常机制与java异常机制存在如下区别:
1、javascript中只有一个异常类Error,无须在定义函数时声明抛出异常,所以没有throws关键字
2、javascript是弱语言类型,所以catch语句后括号里的异常实例无须声明类型
3、javascript只有一个异常类Error,所以try块后只能有一个catch块
4、获取异常描述信息是通过异常对象的message属性。例如e.message
10、with语句:使用with语句可以避免重复书写对象。with后只有一个语句是括号可省略,但意义不大。语法格式:with(object){...}
例如:document.writeln("1233");document.writeln("1233");document.writeln("1233");
可以改写成:with(document){writeln("1233")}
11、for in 循环:for in循环实质上是一种foreach循环:主要作用:
1、遍历数组里的所有元素。当遍历数组时循环计数器是数组元素的索引。
var arr = ["1111","2222","3333"];
for(index in arr){
document.writeln(arr[index]);
}
2、遍历javascript对象里的所有属性。当遍历对象属性时,循环计数器是该对象的属性。
for(field in navigator){
document.writeln(field);
}
12、函数:
1、在匿名函数定义的语法最后不要忘记紧跟分号(;)。var f = function(s){...};
注:var f = function abd(){...};这种写法在调用时abd()失去意义,即用f()没有问题,用abd()调用时在报错。Firefox和Opera不支持。
2、函数和类:函数不仅是一个函数还是一个类。
函数的调用方式:
1、直接调用函数:调用者.函数名(参数列表);----调用者可以省略;直接调用函数如果有return则返回return结果,无return就不返回任何结果。
2、使用关键字new调用函数:这种方式总有返回值,返回值是一个JavaScript对象。
function test(name){//定义一个函数
return "你好," + name ;
}
var rval = test('leegang');//直接调用函数
var obj = new test('leegang');//将函数作为类的构造器
alert(rval + "\n" + obj);
3、函数名.call(调用者,参数列表);
4、 函数名.apply(调用者,arguments);
call与apply的本质一样,只不过apply可以通过arguments来访问当前函数的参数
13、函数的实例属性和静态属性:JavaScript中定义的变量不仅有局部变量,还有实例属性和静态属性。根据声明方式变量分为:
1、局部变量:在函数中以普通方式声明的变量,包括var或不加任何前缀声明的变量。
2、实例变量:在函数中以this前缀修饰的变量。
3、静态变量:在函数中以函数名修饰前缀的变量。
注:JavaScript对象不能访问它所属类的静态属性。
14、函数的参数处理:与java相似,JavaScript的参数传递也全部是值传递方式(存在疑问?)。
函数的参数类型:弱类型语言接受参数应该先判断参数类型,并判断参数是否包含了需要访问的属性、方法后在进行逻辑判断
if (typeof person == 'object' && typeof person.age == 'number') 或者 if (p instanceof Person)
15、JavaScript中对象的本质上是一个关联数组,想java中的map数据结构。有一组key-value组成。因此当访问某个对象的属性时可以obj.propName或obj[propName]
当对象的属性名是变量时(即fieldName是一个自定义的变量)只能采用object[fieldName]的方式访问对象属性;如用object.fieldName形式JavaScript会直接访问object对象的fieldName属性结果就是undefined
var person = [name:"hwzhang",age:22];var str = "name";person.str是不正确的需要用person[str]访问
for (propName in p){//遍历Person对象的属性
document.writeln('p对象的' + propName
+ "属性值为:" + p[propName] + "<br />");
}
16、伪继承和prototype:JavaScript并没有提供真正的继承,当通过某个类的prototype属性动态增加属性或方法时,其实质是对原有类的修改,而不是真正产生一个新的子类,所以这种机制依然只是一种伪继承。
对于需要在类定义中定义方法的情形,尽量避免直接在类定义中定义方法,这样可能造成内存泄漏和产生闭包(简单理解为变量除了作用范围仍然存在)。比较安全的方式通过prototype属性来增加属性或方法。
17、创建JavaScript对象:JavaScript的对象只是一种特殊的关联数组。JavaScript中创建对象大致有三种方式:
1、使用关键字new创建对象。
function Person(name, age){this.name = name; this.age = age;}
var p1 = new Person();//JavaScript支持空参数特性,次数name和age均为undefined
var p2 = new Person("hwzhang",22);
2、使用Object创建即时对象。
var myObj = new Object();//这是一个没有属性和方法的空对象
myObj.name = "hwzhang"; myObj.age = 22; myObj.info = function(){};//为对象动态添加属性或方法
myObj.info=methodName;将已有函数添加为对象方法时,不能在函数名后添加括号。一旦添加括号将表示调用函数,则不是将方法本身赋给对象的方法,而是将函数返回值赋给对象
3、使用JSON语法创建对象。
创建对象格式:var obj = {name:"hwzhang",age:22};
创建数组对象格式:var array = ["hwzhang","mygu"];
-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics